一、传统SOA系统架构
从上图可以看出,SOA的思路是把应用中相近的功能聚合到一起,以服务的形式提供出去,因此基于SOA的架构应用可以理解为一批服务的组合。SOA将原来的单体架构按照功能细分为不同的子系统,然后再由各个子系统依赖服务中间件来调用所需服务。
二、微服务架构
微服务架构已将传统的单体架构中的订单服务、商品服务和用户服务拆分为了独立的服务,其中的每一个服务都是一个独立的应用,且可以访问自己的数据库,所以数据库可以有多个-分布式,这些服务队外提供公共的API,并且服务之间可以相互调用。
三、微服务架构与SOA架构的区别
四、构建微服务架构
4.1 将系统拆分为微服务
· 通过业务功能分解并定义与业务功能相对应的服务。
· 将域驱动设计分解为多个子域。
· 按照动词或用例分解,并定义负责特定操作的服务,例如一个负责完成订单的航运服务。
· 通过定义一个对给定类型的实体或资源的所有操作负责的服务来分解名次或资源,例如一个负责管理用户账户的账户服务。
4.2 微服务架构的组件
微服务架构部署了一系列的服务,例如上图的订单服务、商品服务、会员服务等等,每个微服务都会访问自己的数据库。当这些微服务启动时,会将信息注册到服务中心,在客户端发送请求时,请求首先会被API网关所拦截,API网关会读取请求数据,并从注册中心获取对应的服务信息,然后API网关会根据服务信息调用所需的微服务。
4.4 微服务架构技术选型
· 微服务实例的开发:Spring Boot、Jboss公司的Swarm和java ee官方的KumuluzEE等
· 服务的注册与发现:架构中服务的注册与发现功能,可以使用Spring Cloud Eureka、Zookeeper、Consul、Etcd、Dubbo
· 负载均衡:Spring Cloud Ribbon、Dubbo
· 服务容错(熔断机制):Spring Cloud Hystris
· API网关:Spring Cloud Zuul、Spring Reactor、Netty或NodeJS
· 分布式配置中心:Spring Cloud Config
· 调试:Swagger
· 部署:Docker,开源的应用容器引擎,启动速度快,适合轻量级的应用。
· 持续集成:Jenkins搭建自动化部署系统,并使用Docker进行容器化封装。
使用Spring Boot实现微服务实例的开发,使用Spring Cloud Eureka来实现服务的注册与发现,使用Spring Cloud Hystrix的断路器功能来实现服务容错,使用Spring Cloud Ribbon实现服务间的负载均衡,使用Spring Cloud Zuul实现服务网关,使用Spring Cloud Config作为分布式配置中心,使用Swagger对微服务进行测试,并使用Jenkins的持续集成功能来实现自动化部署。