HACSM 是 High Available high Concurrency high Scalability and high Maintainability的缩写,我希望能够搭建一套高可用,高并发,高可扩展和高可维护的系统,并把搭建的过程记录下来,于是就有了这个开源项目。
如今的互联网系统功能越来越多,业务也越来越复杂,传统企业系统的架构模式已经无法满足互联网系统对响应和扩展的需求。如果每次迭代都要在现有系统上重新打包,重新发布,而每次出现新的需求都要从模型层到展示层修改整个系统,对开发人员和运维人员来说都是巨大的挑战。
分布式系统架构概念的提出为这些问题给出了一种解决办法,但是网上大多都是针对系统搭建的某一个方面进行讨论,并没有一篇文章或者一本书能够帮助开发人员从头一步一步搭建一套分布式系统。所以我计划针对上面提到的高可用,高并发,高可扩展和高可维护几个方面搭建一套基于微服务的分布式系统,并将搭建和开发的过程记录下来,下面是整个系统的架构图:
上面的架构方案采用多服务分布式部署的方式实现,底层数据采用PostgreSQL集群,同时支持SQL和NOSQL两种模式;服务节点启动后会将自己注册到服务管理模块,客户端不需要知道服务端的具体位置,同过订阅服务管理模块的获取服务端的真实位置;采用Redis作为分布式缓存方案,可以为单一服务模块提供缓存功能,也可以为多个服务模块共享;服务模块间通过RabbitMQ进行消息通信,异步的处理系统间的通信;最前面用Nginx的反向代理功能对用户请求分发到对应的处理系统。
它有如下特点:
- 所有服务都通过分发和订阅的方式组合起来,能够动态的增加服务节点,同时也可以动态的增加服务模块
- 每个服务都可以部署成多节点的集群环境,防止单点故障
- 服务间异步处理消息,满足系统高并发的需求
- 服务模块可以支持使用多种语言编写
- 通过Jenkins进行系统的持续集成,方便我们对整体架构进行快速的迭代开发和部署
- 监控系统可以持续监控各服务的运行状态,在服务节点挂起的时候自动切换备用节点,并重启故障节点,记录日志
我会尽量每周更新一篇文章,首发在这个wiki上,但发布在这里的文章绝不是最终的版本,实际上我打算采用开源的形式完成这个系列,本系列文章会发布到GitHub上,并且会持续对文章的内容进行修补,并将工作中总结的经验记录到文章里,欢迎你在GitHub和我交流,更欢迎你加入进来,我们一起完成这个系列的编写。
GitHub仓库地址:https://github.com/dexter9000/hacsm-in-action
下面是计划编写的大纲
- 数据库集群搭建
- 缓存集群搭建
- 服务模块(总览)
- 服务模块(数据访问)
- 服务模块(接口)
- 服务模块(服务间通信)
- WEB模块
- 持续集成方案
- 安全性方案
- 系统监控方案