软件架构演进

传统架构到分布式架构详解 前端

软件架构演进
软件架构的发展经历了从单体架构、垂直架构、SOA架构到微服务架构的过程,博客里写到了这四种架构的特色以及优缺点分析,我的学习之用,仅供参考!java

1.1.1 单体架构
算法

特色:
一、全部的功能集成在一个项目工程中。
二、全部的功能打一个war包部署到服务器。
三、应用与数据库分开部署。
四、经过部署应用集群和数据库集群来提升系统的性能。数据库

优势:
一、项目架构简单,前期开发成本低,周期短,小型项目的首选。缓存

缺点:
一、所有功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
二、系统性能扩展只能经过扩展集群结点,成本高、有瓶颈。
三、技术栈受限。服务器

1.1.2 垂直架构
架构

特色
当访问量逐渐增大,单一应用增长机器带来的加速度愈来愈小,将应用拆成互不相干的几个应用,以提高效率。
此时,用于加速前端页面开发的 Web框架(MVC) 是关键。负载均衡

优势:
一、项目架构简单,前期开发成本低,周期短,小型项目的首选。
二、经过垂直拆分,原来的单体项目不至于无限扩大。
三、不一样的项目可采用不一样的技术。框架

缺点:
一、所有功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
二、系统性能扩展只能经过扩展集群结点,成本高、有瓶颈。分布式

1.1.3 SOA架构

面向服务架构,如dubbo

优势:
把模块拆分,使用接口通讯,下降模块之间的耦合度
把项目拆分红若干个子项目,不一样的团队负责不一样的子项目
增长功能时只须要在增长一个子项目,调用其它系统的接口就能够
能够灵活的进行分布式部署

缺点:
系统之间交互须要使用远程通讯,接口开发增长工做量

1.1.4 微服务架构

特色:
一、将系统服务层彻底独立出来,并将服务层抽取为一个一个的微服务。
二、微服务遵循单一原则。
三、微服务之间采用RESTful等轻量协议传输。

优势:
一、服务拆分粒度更细,有利于资源重复利用,提升开发效率。
二、能够更加精准的制定每一个服务的优化方案,提升系统可维护性。
三、微服务架构采用去中心化思想,服务之间采用RESTful等轻量协议通讯,相比ESB更轻量。
四、适用于互联网时代,产品迭代周期更短。

缺点:
一、微服务过多,服务治理成本高,不利于系统维护。
二、分布式系统开发的技术成本高(容错、分布式事务等),对团队挑战大。

要解决的技术难点:
一、这么多服务,怎么找?
经过zookeeper作服务注册信息的分布式管理。当服务上线时,服务提供者将本身的服务信息注册到ZK,并经过心跳维持长连接,实时更新连接信息。服务调用者经过ZK寻址,根据可定制算法,找到一个服务,还能够将服务信息缓存在本地以提升性能。当服务下线时,ZK会发通知给服务客户端。 
               
主流的注册中心:zookeeper、Eureka、consul、etcd

二、服务之间如何通讯?
由于全部的微服务都是独立的Java进程跑在独立的虚拟机上,因此服务间的通讯就是IPC(inter process communication),已经有不少成熟的方案。好比基于HTTP的REST或者Thrift

三、这么多服务,服务挂了怎么办? 重试机制熔断机制限流/降级负载均衡

相关文章
相关标签/搜索