write on 2020年2月22日23:49:12
目录导航
浅谈软件架构的演变
单体架构
web工程师将所有的功能模块打包放在一个web容器中部署,所有功能模块使用同一个数据库,如下是一个单体架构的电商系统:
单体架构的优点
- 项目结构简单,开发成本低,选好框架撸起袖子就是干,小型项目的首选。
- 部署方便,运维成本小,直接打包、上传、运行即可。
- 测试方便,IDE就是最直接的测试工具,本地就可以启动完整的系统。
单体架构的缺点
- 所有功能模块全部集成在一个工程中,不易于开发、扩展和维护。
- 功能模块的依赖性太高,无法应对突击开发需求。
- 版本迭代效率变低,修改一个地方整个项目需要全部编译、部署、启动。
对于单体架构来说较适用于小型项目,比如毕业设计或者某些展示类的网站开发。
分布式架构
针对单体架构的不足,为了适应大型项目的开发需求,公司将一个单体架构按业务垂直拆分为若干系统,系统间通过网络交互来完成用户的业务处理,每个系统皆可分布式部署。
电商分布式架构图:
分布式架构的优点
- 系统垂直拆分,子系统变成小型系统,开发成本低,周期短。
- 每个子系统皆可按需扩展。
- 每个子系统皆可采用不同的技术,甚至环境。
分布式架构的缺点
- 子系统之间存在数据冗余(两边公共数据自行维护)、功能冗余(两边公共功能自行维护)、耦合度高(模块间还是具有高依赖度)。
- 按需伸缩颗粒度不够,无法实现一个子系统实现不同的业务。(疑惑?)
SOA架构
SOA架构是一种面向服务的架构,基于分布式架构,是分布式的扩充版。它将不同业务功能按服务进行拆分,并通过这些服务之间定义==良好的接口==和==协议==联系起来。
可以看出来,普通的分布式架构通过简单网络相互通信,而SOA通过协议实现直接调用服务完成通信。
SOA架构的优点
- 将重复公用的部分抽取为组件,以服务的形式向各个系统提供服务(比如权限认证、单点登录就可抽取为服务组件),提高系统的可维护性和开发效率。
- 各个系统之间采用webservice、rpc等方式进行通信
SOA架构的缺点
- 系统和服务界限模糊,会导致抽取的服务功能颗粒性太大,系统和服务之间的耦合性高。
- 服务的接口协议不固定管,种类繁多,不利于系统维护。
微服务架构
基于SOA架构的思想,为了满足移动互联网对大型项目及多客户端的需求,对服务层进行细粒度的拆分,所拆分的每个服务只完成某个特定的功能,比如订单服务只实现订单相关的业务,用户服务实现用户管理相关的业务等等,服务的颗粒度很小,所以称为微服务架构。
微服务架构的优点
- 服务拆分颗粒度更细,有利于资源的重复利用,提高开发效率。
- 可以更加精准的制定每个服务的优化方案,按需开发。
- 产品迭代周期更短。
微服务架构的缺点
- 开发复杂度增加,因为一个业务流程需要多个微服务通过网络交互来完成。
- 微服务过多不利于服务治理,不利于系统维护。
谈谈集群和分布式
什么是集群?
简单的说就是单机处理达到瓶颈时,把单机架构复制几份,这样就形成了一个"集群"。集群中的每台服务器就叫做这个集群中的"节点",所有的节点构成了一个集群。每个节点提供相同的服务,那么这样的系统处理能力就相当于提高了好几倍。
而由此演化出由哪个节点来处理服务的问题?最好能够让此时此刻负载小的节点来处理,这样每个节点压力就比较均匀。要实现这个功能,就需要在集群系统之中加入一个"调度者“,用户的请求先交给他,由他根据当前节点的负载情况再决定将请求交给哪个节点处理,这个"调度者"被称为负载均衡服务器。
比如如果一个电商网站,当下有1W个用户访问,单体架构下处理速度较慢,所有的访问用户都感觉到了明显的"卡顿感",如果我再多开9台服务器,负载均衡将用户分配到不同的服务器中,平均下来每个服务器只需要处理1K个用户的连接即可,压力大大减小。
什么是分布式?
从单机架构到集群架构,你的代码其实无需做任何的修改,你要做的仅仅只是多增加几个节点和负载均衡服务器罢了。
但是架构想演化成微服务架构,整体代码就需要有较大改动了,所以对于新系统,建议直接上微服务架构,这样便于后期运维成本更低。但如果一套老系统升级成微服务架构的话,就得对代码大动干戈了。所以,对于老系统而言,究竟是继续保持集群模式还是升级成微服务架构,这得需要架构师去衡量。
关于分布式架构的演化,上面已经介绍过了,其实分布式架构就是将一个完整的系统按照业务拆分成一个个独立的子系统,在分布式架构中,每个系统称为"服务",这些子系统都能独立运行在容器中,他们之间通过rpc的方式通信。
集群和分布式
分布式中的每一个节点都是可以做成集群的形式,比如如果某商场项目中用户服务访问量剧增,但其他服务无变化,可以将用户服务做成集群的形式减轻压力。
分布式中的每一个节点都完成不同的业务,一个节点垮了,那么整个业务就不可以访问了。
简单的说,分布式是通过缩短单个任务的执行时间来提高效率的,而集群通过提高单位时间内的执行任务数量来提高效率。
谈谈常用的分布式和微服务技术框架
分布式系统是一个非常广泛的概念,它最终要落实到解决实际问题上,不同的问题有着不同的解决方案和架构。所有的开源项目都是为了解决某个应用场景而生,都是分布式的"落地技术"。
1. 分布式消息服务
- Apache ActiveMQ
- RabbitMQ
- RocketMQ
- Apache Kafka
2. 分布式计算
- MapReduce
- Apache Hadoop
- Apache Spark
- Apache Mesos
3. 分布式存储
- Bigtable
- Apache HBase
- Apache Cassandra
- Memcached
- Redis
- MongoDB
4. 分布式监控
- Nagios
- Zabbix
- Consul
- Zookeeper
5. RestfulApi、微服务及容器技术
- Jersey
- Spring boot
- Docker
参考
- 软件架构的演变(知乎):https://zhuanlan.zhihu.com/p/98392801
- 分布式、集群的概念(知乎):https://zhuanlan.zhihu.com/p/51557577
write end on 2020年2月23日02:34:38