将所有的业务功能都集中在一个项目中开发, 打包成一个包部署。
优点: 就是成本低, 架构简单
缺点: 耦合度极高
根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
优点: 降低服务的耦合; 有利于升级拓展项目
业务越多 ,项目结构越复杂, 那么服务与服务之间的业务关系调用就会越来越复杂。
如此复杂的业务关系, 想要靠人来解决是不可能的, 所以微服务提供了一个组件—–注册中心
注册中心可以记录微服务中 ,每个服务的IP、端口、及其他们的作用(能干什么)
如果一个服务想要调用另一个服务,那么想要知道该服务的作用, 就直接找到他的注册中心就可以得到对应的服务信息。
随着服务的增多, 配置信息也会海量的上升, 对于我们的管理是非常不利的。所以微服务提供了配置中心, 他可以管理这些服务中的所有配置
配置中心可以管理所有我们的配置文件。
如果以后需要有配置进行变更, 我们只需要通知配置中心即可 。它可以通知相关的微服务,实现配置的热更新。
微服务数量达到一定的数量 ,靠我们人为的去维护管理是不可能的, 同时也不是任何用户来都能够访问我们的服务。所以需要进行管理。
服务网关可以实现对进入服务的用户身份进行认证管理
同时还可以将用户的请求 转发到具体的请求。(请求路由)
通过上述的服务网关, 我们就可以将得到的用户请求发送到对应的服务上, 然后服务就可以通过数据库等查询到对应的信息返回给用户。
通过服务网关, 我们就可以将得到的用户请求发送到对应的服务上, 然后服务就可以通过数据库等查询到对应的信息返回给用户。
但是 ,这么多的请求, 这么多的服务。如果全部打到数据库上, 那么对于数据库的压力将是恐怖的。 所以我们需要将数据进行缓存。
对于分布式的集群任务, 我们需要对应的缓存来缓解数据库的访问压力。所以就需要分布式缓存。
分布式集群的请求 ,先打到分布式缓存中, 缓存未命中,再访问数据库。
对于分布式集群来说, 我们的请求可能需要调用不同的集群才能完成一个任务,那么如何处理分配这些请求的执行顺序(执行时间等等),如何分配这些时常,就是我们需要解决的问题。
如果无法很好的分配这些任务的执行 , 对于系统的性能是有极大影响的
消息对列就可以很好的解决这些请求的调度。
提高服务的并发。
如此庞大的集群, 一旦出现问题那将是致命的, 所以我们需要一些东西来维护定位,乃至追踪这些问题。 所以就引入了分布式服务日志 && 系统监控链路追踪。
通过分布式日志服务, 我们可以解决对于出现问题的定位, 但是我们还需要监控来定位乃至观察这些服务的运行情况, 这就用到了系统监控和链路追踪
服务集群达到这样的量级, 如果还是通过人工部署那当然是不现实的, 所以就需要用到自动化集群的部署
通过Jenkins来实现对微服务进行自动化的编译, 基于Docker进行打包形成镜像。再通过K8s 或者 RANCHER这样的技术实现微服务的集成部署。
SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验: