笔者做java开发已经四年多了 , 这个 架构学习 系列 , 算是对四年时间的一个积累 , 也是做一个记录 ,
概括:
《可扩展的艺术》一书提出了一个更加系统的可扩展模型——AKF可扩展立方(Scalability Cube)。这个立方体中沿着三个坐标轴设置分别为:X、Y、Z。
X轴扩展 —— 关注水平的数据和服务克隆,也就是前文提到的“加机器解决问题” Y轴扩展 —— 关注应用中职责的划分,比如数据类型,交易执行类型的划分 Z轴扩展 —— 关注服务和数据的优先级划分,如分地域划分
借用一下别人得总结 , 感觉挺模糊的 , 不过笔者个人感觉很有道理 .
- X轴扩展 —— 关注水平的数据和服务克隆 , 也就是所谓的 加机器 , 部署多个节点 ,实现负载均衡 ; 缓存集群 ; 使用消息队列 ; 数据库的主从复制,读写分离 , 升级硬件 等等 , 个人感觉 先升级硬件(scale up) , 再水平扩展(scale out)这样的顺序更好一些; 当然这只是对应一般的业务场景 , 一些特殊的业务 , 比如秒杀 之类的需要在单纯的增加节点之后做一些额外的操作 , 在这里只做一个概括 , 之后的系列会分开详细说明
- Y轴扩展 —— 关注应用中职责的划分 ; 这个通俗的来说主要就是服务化和分库分表了 , 着重需要注意分布式事务问题
- Z轴扩展 —— 关注服务和数据的优先级划分 ; 这个形象点说就是多机房了
上面说了架构的概括 , 接下来详细说一下架构的具体 , 让这篇文章干一些 , 没有那么虚 , 笔者工作以来的方向主要是 互联网社区 , 但是架构这东西我觉得都差不多,
接下来我给大家展示几幅图 , 表现出架构的升级过程.
这个是笔者之前的一个公司的架构 , 相信这个简单的架构是很多中小公司的标配了 , 当时公司的产品大概有百万用户 , 每天日活最高是两万 , 用这套架构完全可以承载用户的请求 , 不过这里省略了一些细节, 比如说是图片的存储 , 还有im消息 , 这些都是使用的付费服务 , 主要的目的是这些产品比较完善 , cdn加速可以提高用户体验 ; 初期减少运维成本 , 人少 , 精力有限等.
这个是笔者目前公司的架构 , 这个只是一部分 , 涵盖的是APP相关的架构