前言
微服务
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。微服务架构模式(Microservices Architecture Pattern)的目的是将大型的、复杂的、长期运行的应用程序构建为一组相互配合的服务,每个服务都可以很容易做局部修改。微服务架构带来可独立部署、高扩展与伸缩、自由选择开发语言、高效利用资源、故障隔离等优点,同时也因为服务多带来分布式事务、服务之间通信、监控、部署等新的问题
优势
第一,通过分解巨大单体式应用为多个服务的方法解决了复杂性问题。在功能不变的情况下,应用被分解为多个可管理的分支或服务。每个服务都有一个用RPC-或者消息驱动API定义清楚的边界。微服务架构模式给采用单体式编码方式很难实现的功能提供了模块化的解决方案,由此,单个服务很容易开发、理解和维护。
第二,这种架构使得每个服务都可以有专门开发团队来开发。开发者可以自由选择开发技术,提供API服务。这种自由意味着开发者不需要被迫使用某项目开始时采用的过时技术,他们可以选择现在的技术。甚至于,因为服务都是相对简单,即使用现在技术重写以前代码也不是很困难的事情。
第三,微服务架构模式是每个微服务独立的部署。开发者不再需要协调其它服务部署对本服务的影响。这种改变可以加快部署速度。团队可以采用AB测试,快速的部署变化。微服务架构模式使得持续化部署成为可能。
最后,微服务架构模式使得每个服务独立扩展。你可以根据每个服务的规模来部署满足需求的规模。甚至于,你可以使用更适合于服务资源需求的云服务。比如,你可以为计算密集型服务选择高配置的云主机,而在为存储密集型的服务选择高带宽高存储的云主机。
劣势
第一,微服务应用是分布式系统,由此会带来固有的复杂性。
第二,分区的数据库架构在微服务架构应用中,需要更新不同服务所使用的不同的数据库,这对开发者提出了更高的要求和挑战。
第三,测试一个基于微服务架构的应用也是很复杂的任务。
第四,微服务架构模式应用的改变将会波及多个服务。
第五,部署一个微服务应用也很复杂。一个微服务应用一般由大批服务构成。成功部署一个微服务应用需要开发者有足够的控制部署方法,并高度自动化。
微服务原理
1:RPC框架
(1)RPC框架是架构微服务化的首要基础组件,它能大大降低架构微服务化的成本,提高调用方与服务提供方的研发效率,屏蔽跨进程调用函数(服务)的各类复杂细节
(2)RPC框架的职责是:让调用方感觉就像调用本地函数一样调用远端函数、让服务提供方感觉就像实现一个本地函数一样来实现服务
2:分布式/版本化配置(Distributed/versioned configuration)
3:注册与发现(Registry and Discovery)
4:路由(Routing)
5:服务调用(Service-to-service calls)
6:负载均衡(Load balancing)
7:短路( Circuit Break )
8:分布式消息
Spring Cloud Netflix系列
- Hystrix: 断路器和资源隔离
- Feign: 声明式HTTP REST请求客户端
- Ribbon: 与Eureka结合实现软负载均衡
- Zuul: API请求路由,即Api Gateway
- Bus: 各个微服务节点之间的消息通讯
- Config: 配置的中央化存储
服务注册
服务中心
一,程序代码
@SpringBootApplication @EnableEurekaServer public class SydcCloudEurekaApplication { public static void main(String[] args) { SpringApplication.run(SydcCloudEurekaApplication.class, args); } }
二,配置
server: port: 10001 eureka: instance: hostname: 172.17.10.14 client: fetch-registry: false register-with-eureka: false service-url: defaultZone: http://172.17.10.14:10001/eureka/
三,pom设置
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
客户端
1,@EnableDiscoveryClient
注解是基于spring-cloud-commons
依赖,并且在classpath中实现;
2,@EnableEurekaClient
注解是基于spring-cloud-netflix
依赖,只能为eureka作用;