传统开发全部业务逻辑都在一个应用中, 开发,测试,部署随着需求增长会不断为单个项目增长不一样业务模块;前端展示也不局限于html视图模板的形式,后端向前端支持须要更多的接口模块。html
随着需求增多,项目变大,单体系统部署在一个进程内部,每每修改很小的功能,为了部署上线也会影响其余功能。后期维护成本会变得愈来愈大,难以控制。前端
微服务架构
中不一样模块拆分红不一样服务,都能独立部署和扩展,运行在本身的进程内,有稳定的边界,更新也不会影响其余服务运营。并且因为是独立部署的,能够更准确的为每一个服务评估性能容量,也更容易发现系统瓶颈位置。算法
微服务架构
有如此多优势,单也由于服务的拆分引入了许多问题。数据库
自动化的工具
。单体应用的代码依赖
变为了服务间的通讯依赖
, 因此要保证接口的正确调用,须要完善的接口和版本管理工具
。网络延迟
,分布式事务
,异步消息
,容错性
等。在微服务架构
中一般经过两种方式互相通讯:后端
HTTP
的RESTFUL API
或轻量级消息发送协议, 实现消息传递和服务调用的触发RabbitMQ
提供可靠异步交换.在实施微服务架构时,但愿每个服务都管理其自由的数据库,这就是数据管理的去中心化。安全
但随之而来数据一致性也成了须要解决的问题直以,分布式事务
自己实现难度就很是大,因此在微服务架构中,强调在各个服务之间进行无事务
的调用,对数据一致性,只要求数据在最后处理状态一致即刻;若在过程当中发现错误, 经过补偿机制来进行处理,使得错误数据可以达到最终的 一 致性。网络
如下内容摘自个人
领域驱动设计(DDD:Domain-Driven Design)
笔记架构传统架构,数据通常是强一致性的,咱们一般会使用数据库事务保证一次操做的全部数据修改都在一个数据库事务里,从而保证了数据的强一致性。在分布式的场景,咱们也一样但愿数据的强一致性,就是使用分布式事务。可是众所周知,分布式事务的难度、成本是很是高的,并且采用分布式事务的系统的吞吐量都会比较低,系统的可用性也会比较低。因此,不少时候,咱们也会放弃数据的强一致性,而采用最终一致性;负载均衡
CQRS(Command Query Responsibility Segregation)架构 - 命令查询的责任分离, 则彻底秉持最终一致性的理念。这种架构基于一个很重要的假设,就是用户看到的数据老是旧的。好比秒杀的场景,当你下单前,也许界面上你看到的商品数量是有的,可是当你下单的时候,系统提示商品卖完了。运维
单体应用中, 通常不存在单个组件故障而其余部件还能运行的状况,一般是一挂全挂。
在微服务架构中,当部分服务存在故障,而致使没有返回,线程挂起等待,直到超时才能释放。正常服务频繁调用故障服务,致使大量线程被挂起,从而出现故障蔓延。
因此晶块检测出故障源并京可能自动恢复服务很关键。一般但愿每一个服务中实现监控和日志记录,好比服务状态,断路器状态,吞吐量,网络延迟等关键数据的仪表盘。
设计服务时,须要学习领域驱动设计,细致的分出每一个服务和相关边界。
实施微服务
的团队,每一个小组都应该以作产品的方式,对服务的整个生命周期负责。
Spring Cloud
是基于Spring Boot
的微服务架构开发工具,它为微服务中涉及的配置管理
,服务治理
, 断路器
, 智能路由
, 微代理
, 控制总线
, 全局锁
,决策竞选
,分布式会话
和集群状态管理
等操做提供了简单的开发方式。
经常使用子项目:
Spring Cloud Config
配置管理工具, 支持使用Git存储 配置内容, 可使用它实现应用配置的外部化存储, 并支持客户端配置信息刷新、 加密/ 解密配置内容 等Spring Cloud Netflix
核心组件,对多个Netflix OSS
套件进行整合
Eureka
服务治理组件,包含服务注册中心、 服务注册与发现机制的实现。Hystrix
容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。Ribbon
客户端负载均衡的服务调用组件。Feign
基于Ribbon
和Hystrix
的声明式服务调用组件。Zuul
网关组件,提供智能路由,访问过滤等功能。Archaius
外部化配置组件Spring Cloud Bus
事件、消息总线。用于传播集群中的状态变化或事件, 以触发后续的处理, 好比用来动态刷新配置等。Spring Cloud Cluster
针对ZooKeeper
,Redis
,Hazelcast
,Consul
的选举算法和通用状态模式的实现。Spring Cloud Consul
服务发现与配置管理工具。Spring Cloud Stream
经过Redis
,Rabbit
或Kafka
实现的消费微服务,经过简单的声明式模型来发送和接收消息。Spring Cloud Security
安全工具包,提供在Zuul
代理中对OAuth2
客户端请求的中继器。Spring Cloud Sleuth
分布式跟踪实现,能够完美整合Zipkin
Spring Cloud ZooKeeper
服务发现与配置管理工具Spring Cloud Starters
基于Spring Boot
风格项目的基础依赖模块。