概念:把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持业务的小服务,每个小服务可以独立运行与部署.
在业务代码更新过程中,不可避免的会影响到其他业务的系统。而在上线之前,一般都会经历测试的阶段,但是在业务系统庞大之后,不论每次软件版本功能的更新大与小,测试无法全面测试。有时候甚至是在当时上线没有发现问题,可能会在下次发布或者是在其他的操作过程中,才发现问题。这样处理问题的故障定位就会异常的复杂,不能快速准确的定位问题。 基于此背景,微服务概念应用而生。业务系统服务的发展经历了几个阶段:
SOA(Service-Oriented Architecture,面向服务架构)模式(大概20l4年)
传统的企业级应用是单机或双机集群应用(php,tomcat),一般采用分层结构,如应用层(代码逻辑)/数据层(数据库),这主要是水平切分的思想。每个应用之间的耦合性比较高。
SOA(面向服务的软件架构、Service Oriented Architecture),是一种软件设计模式,主要应用于不同应用组件间通过某种自定义协议来相互通信,客户端调用需要集成其SDK。
正是因为传统的软件架构模式,带来的系统每次更新与部署,都有可能会导致其他的业务模块出现异常。那么将服务拆分为独立部署的单个应用,势在必行。并且业务逻辑之间相互不影响,不需要依赖其他业务模块运行。有独立的进程与端口。
微服务架构在某种程度上是面向服务的架构SOA继续发展的下一步。基本上这种架构类型是移动互联网现在最流行的软件开框架。在微服务架构中,集中式业务服务管理几乎不存在,微服务使用轻量级HTTP接口进行通信。
在SOA架构发展之后,相比Micro Service能够基于框架快速的开发应用程序,甚至都不需要专用的启动web服务(性能瓶颈) 来启动微服务。而自身的软件框架已经携带。
在各个软件运行环境中(开发、测试、生产),运维与开发人员经常需要修改不同环境的配置文件,在操作中可能会因为失误致服务异常的情况,经常发生。之前的SOA架构如果需要实现配置中心功能,那么需要借助第三方的配置中心(有些SOA框架自带,但是功能较弱),但是这一切相对于微服务而言,实现起来比较简单,包括一系列的服务治理(服务管理手段)方案,在框架中早已经集成,大大降低了开发人员的工作负载,使得软件开发人员只需要专注于业务逻辑开发,而不需要关心软件框架的内部实现。
在后期的容器云中,客户端使用http协议的方式,使得微服务框架能够非常方便的融入docker。并且通过docker的ingress功能实现对服务的弹性负载均衡.
优势复杂度可 (控复杂度降低)
在将业务应用拆分之后,使原本复杂的应用,变得简单。每一个微服务只有单一的某一项功能,并通过定义良好的接口调用模式,使客户端调用更加简单。由于”体积”小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。
独立部署(Web):
由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。降低了应用部署的复杂度。
技术选型灵活(SpringCloud)
微服务架构下,业务逻辑是去中心化的。每个团队可以根据自身业务的需求和行业发展的现状,自由选择最适合的技术栈。由于每个微服务相对简单,故需要对技术栈进行升级时所面临的风险就较低,甚至完全重构业务也是可行的。
扩展
单应用架构也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。
代码重复
由于每个服务能够独立运行,有时需要向不同服务添加一些相同代码,这就会导致代码重复,并且也增加了开发人员的工作量。
运维复杂
在采用微服务架构时,系统由多个独立运行的微服务构成,需要一个设计良好的监控系统对各个微服务的运行状态进行监控。 运维人员需要对系统有细致的了解才对够更好的运维业务系统。
影响性能
微服务的间通过http等形式进行交互调用,通信的时延会受到较大的影响。
Docker是一个开源应用容器(当然目前也分为CE和EE版本,不完全开源化,也存在收费版本),让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统(支持容器)上,也可以使用虚拟化系统运行容器。容器是完全使用系统隔离机制,相互之间不会有任何接口依赖。
Docker只要在支持Docker的操作系统上运行,就可以运行微服务。有点类以JAVA的跨平台性,只需要VM虚拟机就可以运行JAVA代码。
Docker作为容器工具可以把:业务逻辑容器、数据库容器、储存容器、队列容器使得软件可以拆分成若干个标准化容器,然后容器间相互通信,从而形成微服务。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
Ice 是RPC通讯领域里最稳定、强大、高性能、跨平台、多语言支持的老牌开源中间件,特别适合于当前互联网领域中一个平台存在多种开发语言编程,以及网站和pp应用并存的复杂大型项目。
支持客户端API的语言有C++、。NET、Java、Python、Object-C、Ruby、PHP、JavaScript等。在服务器可以使用C、。NET、Java、Python等来开发。
Spring Boot可以建立独立的Spring应用程序;
内嵌了如Tomcat,Jetty和Undertow这样的web容器,也,就是说可以直接跑起来,用不着再做部署工作了。
基于Spring Boot实现的服务治理工具集。
利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
HTTP响应状态代码指示特定HTTP请求是否已成功完成。响应分为五类:信息响应(100-199),成功响应(200-299),重定向(300-399),客户端错误(400-499)和服务器错误(500-599)。状态代码由section10 of RFC2616定义
API由一组定义的协议组合而成,可用于构建和集成应用软件。API是“应用编程接口“的缩写。
简而言之,客户端在访问服务端某个业务时,需要知道服务端的的访问地址(通信协议)与需要发送的数据类型与结构,从而从服务端获取到需要的数据。
在TCP/IP协议中,我们知道不同应用之间要获取数据的大致流程: