电商行业特点
- 分布式
垂直拆分:根据功能模块进行拆分
水平拆分:根据业务层级进行拆分
高并发
用户单位时间内访问服务器数量,是电商行业中面临的主要问题
集群
抗击高兵发的有效手段,同时集群内部实现高可用
- 海量数据处理
随着公司数据的不断积累.自身的数据量很庞大.如果高效的处理数据/分析
框架调用流程
EasyUI后台调用流程
分布式项目的设计思想
为了实现架构之间的松耦合,将项目根据分布式的思想进行拆分.
- 项目的垂直拆分
根据功能模块的不同将项目进行拆分.
- 项目的水平拆分
在大型项目中,由于开发的人数众多,项目复杂度高.为了保证项目开发的耦合性低.实现项目的水平拆分.
将一个大型项目根据层级模块进行拆分.Controller项目/Service项目Mapper项目
项目创建时采用聚合项目的方式进行管理
分布式项目的jar包如何管理
将项目中用到公共的jar包使用服务支撑项目jt-parent进行添加,其他的项目只需要继承jt-parent后获取对应的jar包全部依赖.从而实现了jar包的统一管理
介绍一下通用Mapper
- 早期使用JDBC操作数据库.该操作特别的繁琐,并且所有的数据需要自己手动的封装.
- JPA:是java持久化的API(用面向对象的方式操作数据库)思想
User user = new User(); setXXXX
User.setId(1);
User.setName(tom);
工具API.insert(user); JPA内部将对象自动转化为sql语句
Insert into …….
- Haibernate框架.号称是自动化的(ORM)
程序员只需要操作对象,从而完成了对数据库的操作.
缺点:
- 做新增/删除/修改会产生一些冗余的sql(出于安全性性考虑)
- 如果做多表关联操作(CRUD) ,需要装备配置文件,通过配置文件进行数据关联设定.同时需要学习Hql(语句)
- 早期数据库容量是有限,超过500万后查询效率开始变低.
4.Mybatis
优点:继承ORM,摈弃了冗余的sql(自己手写),
5.通用Mapper插件基于mybaits的
效果:可以实现单表CRUD使用对象操作.(反射机制)
Nginx是什么,有什么作用
Nginx (engine x) 是一个轻量级的是一个高性能的HTTP和反向代理服务器,其特点是占有内存少,并发能力强
主要是用来反向代理和实现负载均衡.
谈一下反向代理和负载均衡

说明:
- Nginx首先需要监听特定的域名.
- 当用户根据域名进行资源访问时.首先会访问nginx
- 之后nginx代替请求者根据内部的配置文件,实现反向代理.将请求转化为特定的请求路径进行资源访问.
- 当Nginx获取资源后将数据返回给用户.完成请求的正确的响应.
负载均衡:访问量高时,可以让服务器尽量分摊压力,
实现策略:轮询,权重,IP_HASH(一般不用)
Nginx的健康监测机制
当后台的服务器出现宕机的现象,当时nginx中的配置文件并没有改变时,请求依然会发往故障的机器.需要人为的维护配置文件,这样的操作不智能.那么采用健康检测机制.可以实现故障的自动的迁移.
属性介绍:
1.max_fails=1 当检测服务器是否正常时,如果检测失败的次数达到规定的次数时,则断定该服务器故障,在规定的时间周期内,不会将请求发往该机器.
2.fail_timeout=60s定义时钟周期
Nginx如何保证请求参数不丢
在nginx中添加请求头的参数,表示每次请求时,携带请求者的请求头信息,访问服务器.
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
数据库数据如何备份(数据备份策略)
- 冷备份:定期将数据库中的文件进行转储,定期进行数据备份.
- 热备份:搭建数据库主从结构,当主库数据发生改变时,从库根据主库的二进制日志文件进行备份.
双机热备:数据库互为主从,数据库代理服务器对主库进行心跳检测,实现数据的高可用,为了防止主库宕机后发生雪崩现象
数据库压力大时,怎么实现高可用
1.用数据库代理服务器搭建数据库的读写分离进行分流.读取从库数据,写数据在主库
可用的数据库代理服务器有Amoeba和Mycat
由于大量的用户的数据库操作都需要通过数据库来完成.造成数据库负载过高.因为数据库操作中查询的操作占很大的比重.
2.数据库实现双机热备.数据库的优化策略
优化sql语句(多表操作) where 左连接 右连接 内连接
原则:尽可能根据主键查询,尽可能少用关联查询.
- 创建索引(对经常查询的数据创建索引)
- 添加缓存(Redis/MemCache)
- 定期进行数据转储(将一些查询较少的数据保存到历史表,让当前表维护可控的数据量)
- 分库分表(需要大量的数据库服务器)
什么是Mycat
是一个数据库中间件,实现读写分离,分库分表和数据库故障迁移.什么是Redis,运行在哪里
开源的内存中的数据结构存储系统,可以用做数据库,缓存和消息中间件
基于C语言开发,运行时在内存中,运行速度很快
https://mp.weixin.qq.com/s/0Fqp2aGq7c_x_bEK9pOeeg
Redis中的数据持久化策略
如果使用时允许丢失部分数据(少量的)则使用RDB模式,它的效率高,也是redis默认的策略,如果不允许丢失数据则采用AOF模式,它的安全性高,但是效率较低.
Redis中的内存维护策略
问题:如果数据都存储到redis中,如果内存占满了,redis如何维护?
解决方案:
- 动态的扩容redis节点(不科学)
- 为数据设定超时时间
动态的将不用的数据删除.(LRU算法)
算法介绍:
内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。
redis为什么要分片
Hash一致性
- 均衡性
尽可能均匀分片节点中的数据
- 单调性
实现数据的动态迁移
- 分散性
由于分布式原因,导致不能获取全部节点信息,使得一个key有多个位置
- 负载
知道哨兵机制吗,怎么实现的,实现了什么功能
功能:实现redis高可用
机制:心跳检测
哨兵和分片的优缺点
优点:
- 分片可以使redis动态内存扩容.
- 分片可以将数据均匀的分配到不同的节点中,使数据分散保存.
哨兵可以实现redis高可用.
缺点:
分片如果有一个节点出现宕机则整个分片都不能正常使用.
- 哨兵如果发生宕机现象,则影响整个redis服务.
升级:
- 使用多台redis实现内存空间的动态扩容.
- 实现在redis内存实现高可用(不再使用哨兵机制)使用组件(ruby)
搭建集群,实现分片和高可用的全部功能.
Redis集群
使用ruby工具创建集群.集群中全部的节点相互之间互相通讯.在redis内部实现高可用.redis集群是分片和哨兵的集合体.
伪静态技术
动态页面不能被搜索引擎收录.为了保证搜索引擎的友好性.则以.html的静态页面形式展现动态页面数据
跨域问题
说明:在www.jt.com中调用manage.jt.com时访问不成功.原因该操作是一个跨域请求.
浏览器不允许进行跨域请求.会将成功返回的数据进行拦截.不予显示.一切出于安全性的考虑.
同源策略
规则:
请求协议/域名/端口号是否相同,如果三者都一致,那么是同域访问.(即同源策略)浏览器可以正常执行.除此之外的全部的请求都是跨域请求.
怎么解决跨域问题?
利用javascript中src属性实现跨域.
客户端定义回调函数 callback=hello
服务端程序封装特定的JSON格式 callback(JSON) 执行回调函数
JSONP就是基于这个原理实现的.
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的
