1、概述
2、基本概念
3、架构演进
3.2第一次演进:Tomcat与数据库分开部署
3.3 第二次演进:引入本地缓存和分布式缓存
3.4 第三次演进:引入反向代理实现负载均衡
3.5 第四次演进:数据库读写分离
3.6 第五次演进:数据库按业务分库
3.7 第六次演进:把大表拆分为小表
3.8 第七次演进:使用LVS或F5来使多个Nginx负载均衡
3.9 第八次演进:通过DNS轮询实现机房间的负载均衡
3.10 第九次演进:引入NoSQL数据库和搜索引擎等技术
3.11 第十次演进:大应用拆分为小应用
3.12 第十一次演进:复用的功能抽离成微服务
3.13 第十二次演进:引入企业服务总线ESB屏蔽服务接口的访问差异
3.14 第十三次演进:引入容器化技术实现运行环境隔离与动态服务管理
3.15 第十四次演进:以云平台承载系统
IaaS:基础设施即服务。对应于上面所说的机器资源统一为资源整体,可动态申请硬件资源的层面;
PaaS:平台即服务。对应于上面所说的提供常用的技术组件方便系统的开发和维护;
SaaS:软件即服务。对应于上面所说的提供开发好的应用或服务,按功能或性能要求付费。
4、架构设计总结
N+1设计:系统中的每个组件都应做到没有单点故障;
回滚设计:确保系统可以向前兼容,在系统升级时应能有办法回滚版本;
禁用设计:应该提供控制具体功能是否可用的配置,在系统出现故障时能够快速下线功能;
监控设计:在设计阶段就要考虑监控的手段;
多活数据中心设计:若系统需要极高的高可用,应考虑在多地实施数据中心进行多活,至少在一个机房断电的情况下系统依然可用;
采用成熟的技术:刚开发的或开源的技术往往存在很多隐藏的bug,出了问题没有商业支持可能会是一个灾难;
资源隔离设计:应避免单一业务占用全部资源;
架构应能水平扩展:系统只有做到能水平扩展,才能有效避免瓶颈问题;
非核心则购买:非核心功能若需要占用大量的研发资源才能解决,则考虑购买成熟的产品;
使用商用硬件:商用硬件能有效降低硬件故障的机率;
快速迭代:系统应该快速开发小功能模块,尽快上线进行验证,早日发现问题大大降低系统交付的风险;
无状态设计:服务接口应该做成无状态的,当前接口的访问不依赖于接口上次访问的状态。
Java团长
专注于Java干货分享
扫描上方二维码获取更多Java干货