微服务,spring boot,spring cloud
什么是微服务
将复杂的业务系统根据业务拆分成多个子系统协同完成主体业务。
微服务的九大特性(根据Martin Fowler 在 Microservices 中的归纳)
服务组件化(灵活拆装,低耦合)
按业务组织团队(分工驱动团队的技术知识储备)
做产品的态度,团队对整个生命周期负责,业务进行拆分后,每个模块的的业务小而精,更容易做纵向扩展,把小功能做精
智能端点和哑管道,组件间从原先的方法调用的交互方式变为基于粗粒度的通信协议(Http的RESTful API,HSF,RabbitMQ)
去中心化管理,不需要再为整个项目(诸多子业务的组合)定义统一的标准,意味着每个子模块要解决一些模块特有的问题可以灵活的引进一些技术,可以避免单体项目在整体的标准和框架限制下,一些技术无法引入,导致短板被放大,团队花大量的时间解决一些简单的问题(重复造轮子)
去中心化管理数据,数据结构更优,性能提升空间更大。
基础设施自动化,自动化测试、自动化部署
容错设计,微服务的项目分部和部署比单体服务更加的复杂(整体项目协同角度看),需要更强的容错机制,不然一个服务的问题蔓延(错误自动回复,日志分析、监控(非常重要),断路器)。
演进式设计,微服务的设计成本比较高,对团队来说要服务处更大的代价,不成熟的团队可以先以单体系统进行开发部署和实施,在后续业务扩展的过程中,再慢慢将一些模块进行抽离,围绕着住业务进行微服务改造。
微服务带来的问题
事务,最终一致性(重新发起调用,日志分析,结果分析)
容错,日志分析、监控
微服务解决方案
spring cloud
注册中心 Eureka Server
服务管理,一个双层map管理注册过来的服务 Mao<ServerName,Map<InstanceName,Instance>>.
注册功能
注销功能
按时剔除无心跳的服务
剔除无效服务功能(一些服务虽然有心跳,但无法提供正常服务,通过调用spring boot整合的health监控端点实现)
获取服务列表功能
刷新心跳接口
注册客户端 Eureka Client
服务治理的客户端,集成到每个业务系统中,将业务系统提供的服务注册到注册中心。
调用注册接口进行注册,维护心跳(定时任务)
调用注销接口进行注销(服务正常关闭或重启)
获取服务列表(定时任务)
负载均衡 Ribbon
对获取到的服务列表进行轮询选择(或者配置其他负载均衡方式)
spring http
发起调用