微服务是分布式架构的一种,分布式架构就是要把服务的过程做拆分,而拆分的过程中会产生各种需要解决的问题,SpringCloud解决的是服务拆分中的服务治理问题。
微服务要做的第一件事就是拆分,传统的单体架构所有的业务功能都写在一起,随着越来越复杂,代码也越来越多,想升级维护就会很困难,所以大型的互联网项目都必须去做拆分。
根据业务功能模块把单体的项目拆分成许多独立的项目,每个项目完成一部分功能,将来独立开发和部署,把这些独立的项目称为一个服务,一个大型的互联网项目会包含数百上千个项目而形成一个服务集群,一个业务需要多个服务来共同完成,服务之间的调用关系越来越复杂的情况下,就需要注册中心来记录每个服务的IP、端口以及它能干什么事,当一个服务需要另一个服务的时候,只需要从注册中心拉去对应的服务信息。
配置中心可以统一地管理服务群中成千上百的配置,当有配置需要变更,通知配置中心即可,它会通知相关的微服务,实现配置的热更新。
服务网关一方面用于对用户的身份做校验,另一方面可以把用户的请求路由到具体的服务,以及做负载均衡。服务接收到请求去处理业务,并访问数据库集群,再把查询到的数据返回给用户。
数据库无法实现高并发,所以还要加入分布式缓存,缓存就是把数据库数据放入到内存当中,为了应对高并发不能是单体缓存,需要做成分布式缓存(集群),用户请求先到缓存再到数据库,对于复杂的搜索功能,简单查询可以走缓存,一些海量数据复杂的搜索统计和分析,缓存无法实现,就需要分布式搜索功能,数据库主要实现数据的写操作和事务类型,对数据安全要求较高的数据存储。
异步通信的消息队列组件,对于分布式或者微服务,一个业务会涉及多个服务,性能会有一定的下降,通过异步通信消息队列变短了响应时间也缩短了,吞吐能力也可以增强,提高服务的并发。
解决服务的一场定位问题:分布式日志服务(统计整个集群中成千上百的服务的运行日志,统一地存储统计分析),系统的监控和链路追踪(实时监控整个集群中每一个服务节点的运行状态、cpu的负载和内存的占用等)。
如何部署?自动化部署:jenkins对服务项目实现自动化的编译,利用docker打包形成镜像,再基于kubernetes和RANCHER实现自动化的部署,这一套统称为持续集成,结合微服务技术和持续集成就是完整的微服务技术栈。
1.认识微服务
微服务架构演变
单体架构:将业务的所有功能集中在一个项目中开发,达成一个包部署
优点:架构简单,部署成本低
缺点:耦合度高,不利于大型项目开发
分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,成为一个服务
优点:降低服务耦合,有利于服务升级拓展
缺点:服务拆分粒度如何?服务集群地址如何维护?服务之间如何实现远程调用?服务健康状态如何感知?
如何解决?webserviceESBHessionDubboSpringCloud*微服务*
微服务是一种经过良好架构设计的分布式架构方案
微服务架构特征:实现高内聚低耦合,降低服务之间的影响和影响的范围,避免整个集群的故障
微服务技术对比
协议方式不同,提供的接口标准不同,项目架构的方案就不同。
SpringCloud
服务拆分与远程调用
服务拆分注意事项:
1.不同微服务不要重复开发相同业务
2.微服务数据独立,不要访问其他微服务的数据库
3.微服务可以将自己的业务暴露为借口,供其他微服务调用