随着互联网的发展,用户群体逐渐扩大,网站的流量成倍增长,常规的单体架构已无法满足请求压力和业务的快速迭代,架构的变化势在必行。下面我们就以拉勾网的架构演进为例,从最开始的单体架构分析,一步步的到现在的微服务架构。
在诞生之初,拉勾的用户量、数据量规模都比较小,项目所有的功能模块都放在一个工程中编码、编译、打包并且部署在⼀个Tomcat容器中的架构模式就是单体应用架构,这样的架构既简单实 用、便于维护,成本有低,成为了那个时代的主流架构方式。

优点:
缺点:
业务量上涨之后,单体应用架构进一步丰富变化,比如应用集群部署、使用Nginx进行负载均衡、增加缓存服务器、增加文件服务器、数据库集群并做读写分离等,通过以上措施增强应对高并发的能力、应对一定的复杂业务场景,但依然属于单体应用架构。

为了避免上面提到的那些问题,开始做模块的垂直划分,做垂直划分的原则是基于拉勾现有的业 务特性来做,核心目标第一个是为了业务之间互不影响,第二个是在研发团队的壮大后为了提高 效率,减少之间的依赖。

优点:
缺点:
在做了垂直划分以后,模块随之增多,维护的成本在也变高,一些通用的业务和模块重复的越来越多,为了解决上面提到的接口协议不统一、服务无法监控、服务的负载均衡,引入了阿里巴巴开源的 Dubbo ,一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
SOA (Service-Oriented Architecture),即面向服务的架构。根据实际业务,把系统拆分成合适的、独立部署的模块,模块之间相互独立(通过Webservice/Dubbo等技术进行通信)。
优点:分布式、松耦合、扩展灵活、可重用。
缺点:服务抽取粒度较大、服务调用方和提供方耦合度较高(接口耦合度)

微服务架构可以说是SOA架构的⼀种拓展,这种架构模式下它拆分粒度更小、服务更独立。把应用拆分成为⼀个个微小的服务,不同的服务可以使用不同的开发语言和存储,服务之间往往通过Restful等轻量级通信。微服务架构关键在于微小、独立、轻量级通信。
微服务是在 SOA 上做的升华粒度更加细致,微服务架构强调的⼀个重点是“业务需要彻底的组件化 和服务化”

微服务架构和SOA架构相似又不同
微服务架构和SOA架构很明显的一个区别就是服务拆分粒度的不同,但是对于拉勾的架构发展来说,我们所看到的SOA阶段其实服务拆分粒度相对来说已经比较细了,所以上述拉勾SOA到拉勾微服务,从服务拆分上来说变化并不大,只是引入了相对完整的新⼀代Spring Cloud微服务技术。自然,上述我们看到的都是拉勾架构演变的阶段结果,每⼀个阶段其实都经历了很多变化,拉勾的服务拆分其实也是走过了从粗到细,并非绝对的⼀步到位。
微服务架构设计的核心思想就是“微”,拆分的粒度相对比较小,这样的话单⼀职责、开发的耦合度就会降低、微小的功能可以独立部署扩展、灵活性强,升级改造影响范围小。
微服务架构的优点: 微服务架构和微服务
微服务架构的缺点:
服务注册:
服务提供者将所提供服务的信息(服务器IP和端口、服务访问协议等)注册/登记到注册中心
服务发现:
服务消费者能够从注册中心获取到较为实时的服务列表,然后根究一定的策略选择一个服务访问

负载均衡即将请求压力分配到多个服务器(应用服务器、数据库服务器等),以此来提高服务的性能、可靠性

熔断即断路保护。微服务架构中,如果下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断。

微服务架构越发流行,⼀个项目往往拆分成很多个服务,那么一次请求就需要涉及到很多个服务。不同的微服务可能是由不同的团队开发、可能使用不同的编程语言实现、整个项目也有可能部署在了很多服务器上(甚值百台、千台)横跨多个不同的数据中心。所谓链路追踪,就是对⼀次请求涉及的很多个服务链路进行日志记录、性能监控。

微服务架构下,不同的微服务往往会有不同的访问地址,客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信可能出现:
那么,API网关就可以较好的统⼀处理上述问题,API请求调用统一接入API网关层,由⽹关转发请求。API网关更专注在安全、路由、流量等问题的处理上(微服务团队专注于处理业务逻辑即可),它的功能比如:
