基础技术框架
struts2+spring+mybatis的一个集成框架,是目前较流行的一种Web应用程序开源框架,集成SSM框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序
存储系统
Redis是一个基于内存的存储系统,具备非常高的读写性能,可以将频繁访问的热点数据存储于Redis中,直接请求Redis服务器读写数据,以降低数据库压力,同时提高数据响应效率。
- Redis优点:
- 提供多种数据结构的支持, 五种数据类型:string,hash,list,set及zset(sorted set)
- 支持数据的备份,即master-slave模式的数据备份
- 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
- 线程安全
- 从3.0.0版本支持集群部署
- 涉及业务场景
- 业务表主键生成,通过Redis来控制并发数据插入,使用毫秒级时间戳+6位随机码来生成主键
- 存储频繁访问的系统配置类数据及热点业务数据,如接口配置、订单数据、商品数据等
- 流量控制,为保证系统不被外围系统大并发请求,拖垮生产系统,通过使用Redis对请求量进行限制,保证系统在安全承载能力范围
- 大并发抢购排队机制,如抢购商品时,目前库存200个,但下单请求为300个,可以将300个下单请求按时间先后进行排队,踢掉最后100个请求,以保证库存与下单量同步
- Session共享,由于系统采用分布式部署策略,如果将session放到Web容器中,将同一请求负载到其他主机时,会产生session丢失,所以需要将session存储于Redis服务器中
- 部署策略
采用3主3备、互为主备部署方案,即使3个主节点全部挂掉,3个从节点会自动升级为主节点,不影响数据读写功能,从而保证数据的完整性,系统的健壮性
RPC框架Dubbo&Zookeeper
Dubbo与Zookeeper组合实现了RPC服务的注册及调用,Dubbo封装了RPC框架,Zookeeper提供了服务注册及发现功能,同时为Dubbo提供负载均衡及集群服务,可以使服务提供方、调用方在局域网内通过序列化对象介质高速通信及数据传输,在提高通信性能的同时,也省去了负载均衡设备。
- Dubbo技术分析
- 暴露服务方称之为“服务提供者”、调用远程服务方称之为“服务消费者”
- Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成
- 支持多种数据传输协议如:RMI、HTTP、Hessian
- 几种协议的通讯效率依次为:RMI > Httpinvoker >= Hessian >> Burlap>> webService,测试结果显示:webservice的效率还是要比其他通讯协议慢10倍
- Provider:暴露服务方称之为“服务提供者”, Consumer:调用远程服务方称之为“服务消费者”
- Zookeeper技术分析
- ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务
- 在整体框架中,担任服务注册机及负载均衡的角色,Dubbo的Provider及Consumer对应的服务都注册到Zookeeper上
- Consumer端第一次调用Provider服务,是通过Zookeeper进行调用,当首次连接建立完后,Consumer与Provider可以直接在局域网中通信
- 业务场景
- 各数据中心如商品中心、订单中心、用户中心、基础中心、营销中心、报表中心,这些提供原子性服务的数据中心,作为Dubbo的P提供者
- 角色注册到Zookeeper上,统一接入层的业务中心作为服务消费者在Zookeeper上订阅服务,同时它也承担着服务提供者角色供定时任务、接口服务这些消费者调用
- 部署策略
- Dubbo服务的Provider、Consumer均使用集群部署
- Zookeeper采用1主2备部署方案,因为zookeeper集群是以宕机个数过半才会让整个集群宕机的,使用的是投票及选举机制,所以奇数个集群更佳
中间件RocketMQ
RocketMQ 是一款分布式、队列模型的消息中间件,它具有保证严格的消息顺序、提供丰富的消息拉取模式、具备高效的订阅者水平扩展能力、实时的消息订阅机制以及亿级消息堆积能力的技术特点。
优点:
- 阿里产品,消息策略、系统架构和应用场景均基于电商平台;
- 提供多种消费模式,如顺序消费、事务消费、随机消费等,为各种复杂的业务场景提供更全面的技术支持;
- 消息消费性能好,支持上万个队列,不会出现消息大量积压;
- 文档资料较丰富、技术社区也比较活跃,便于后期维护及故障处理。
应用: - 在电商平台主要用于非主业务异步处理,如:日志处理、订单支付、短信发送等,使主业务快速响应,
- 生产环境采用2m-2s-async双主双从异步刷盘集群部署,即使磁盘损坏,消息丢失少,且实时性无影响,任一master宕机,均可在另一master中写消息,即使全部宕机,消费者仍可从slave中消费,此过程对应用透明,不用人为干预,以保证系统健壮性,防止单点故障。
Mycat数据库中间件技术
Mycat优点
- 支持SQL92标准
- 支持MYSQL集群,可作为数据库Proxy使用
- 提供高可用性数据分片集群,自动故障切换
- 支持读写分离,支持MySQL双主多从,以及一主多从的模式
- 支持全局表,数据自动分片到多个节点,用于高效表关联查询
任务调度:Quartz框架
- 技术特点:
- Quartz是任务调度框架,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序,并可以做成标准的Java组件或 EJB
- 提供数据库持久化方式实现任务集群,具备负载均衡和容错能力
- 丰富的执行计划配置,且可以在不停应用的情况下,随时调整,实时执行
- 多线程处理,并融入线程池机制,最大效率利用CPU资源
- 提供完善的API接口,对独立任务实时启停,不影响其他任务执行,并可以自行扩展监控机制。
- 可以通过实现一个或者多个监听器接口来实现捕捉日程事件,以监视或控制任务/触发器的行为,例如:记录任务执行历史的日志,或者从文件中载入任务和触发器的定义。
- 应用场景
- 定时调第三方终端厂商接口,抽取物流信息数据、订单数据
- 定时查询营销活动,上传文件到ftp
- 定时核对账单
- 定时生成订单
并行计算:Fork/Join框架
- 技术特点:
- Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。
- 工作窃取(work-stealing)算法,当某个线程执行完当前任务时,可以从其他队列里窃取任务来执行,最大效率的利用线程资源
- 应用场景:
- 批量解析文件,比如现在FTP上有100个文件,可以将此大任务拆分成若干个子任务,根据CPU线程总数执行若干个子任务,并将各个子任务的执行结果汇总至大任务。
- 批量调第三方接口,当订单量比较大时,需要频繁调外围系统的下单接口,如果是线性执行,则处理速度较慢,可以将订单数据进行拆分,多线程并行调用,将大大缩短下单时间
搜索引擎:Solr
Solr是一个非常流行的,高性能的开源企业级搜索引擎平台,属于Apache Lucene项目。主要功能包括强大的全文检索、结果高亮、切面检索、动态聚类、数据库整合、富文本(例如Word,PDF)的处理,以及地理信息搜索。Solr是高度可扩展的,提供分布式检索和索引复制。
存在的困扰问题
- 跨库查询问题
- 高并发系统不稳定问题
- 异步处理事务一致性问题