微服务详解(八):最佳做法和一般原则

微服务详解(一):概述

微服务详解(二):解决方案

微服务详解(三):设置开发环境

微服务详解(四):领域驱动设计

微服务详解(五):实现微服务

微服务详解(六):部署与测试

微服务详解(七):微服务的安全性

微服务详解(八):最佳做法和一般原则

微服务详解(九):故障排除指南

1.概述和心态

把整体式的生产系统更新到微服务的时候,比起从零开始构建一个系统,将需要更好的规划;

2.最佳做法和原则

1.Nanoservice(不推荐)、规模和整体性

基于功能来设计微服务是有意义的,领域驱动设计使得在领域级别定义功能变得很容易;

在一个简单的小型项目中,使用整体式的架构是有意义的;

为了能够方便的改造成为微服务的设计架构,应该使用模块化的开发整体项目,并需要在各个层之间具有松耦合,并且确保不同的功能和特性之间有预定义的接触点和边界;

2.持续集成和部署

每个服务都应该有自身的集成和部署过程。此外,它们必须被自动化。这个任务有很多的工具可用,例如Teamcity、Jenkins等等。及早发现构建失败,尤其是将更高集成到主线的时候;

集成测试(Integration Testing)负责测试系统不同部分的交互,如两个接口,或者系统不同的组件或者模块,如DAO和数据库之间等等。

集成测试是重要的,单个模块首先进行隔离测试,然后集成测试,以检查联合行为并验证需求被正确实现;

3.系统/端到端测试自动化

单元测试确保单个模块独立工作情况良好,集成测试确保不同模块之间的交互均按照预期方式工作。如果单元测试工作情况良好,它意味着集成测试失败的概率大大减小,同样,集成测试确保功能测试很有可能获取成功;

4.自我监控和记录

微服务应当提供服务本身的信息和它所依赖的各种资源状态。

服务信息包括处理一个请求的平均、最小和最大时间,成功和失败的请求的数量,能跟踪请求,内存使用情况等统计信息;

监控是微服务架构的关键组成部分;

日志记录是微服务不应该被忽视的另一个重要方面。具有有效的日志记录关系重大;

使用MDC记录单个微服务的日志,然后还需要对一个完整的系统的日志记录或者集中式日志记录。我们还需要日志的汇总统计数据。做这项工作的工具,包括Loggly和Logspout

5.每个微服务都是用独立的数据存储区

微服务最重要的特征是,微服务与其他的微服务隔离的运行方式,通常作为独立应用程序运行的;

遵循这项规则,建议不要跨多个微服务使用相同的数据库或者任何其他数据存储区;

并且需要灵活地为每个微服务选择最合适此微服务的数据库;

挑战:

如果两个或者多个项目共享相同的数据库结构,会产生一下问题:存在一个微服务的变化可能会影响其他微服务模型的可能性。在这种情况下,一个微服务的变化可能影响其他依赖的微服务,所以你也需要改变依赖模型结构;

要解决此问题,微服务应该基于API驱动的平台开发。每个微服务都将公开其API,它们可以由其他微服务使用。因此,你也需要开发API,这是集成不同的微服务的需要;

同样,由于有不同的数据库存储区,实际项目数据也分散在多个数据存储区,这使得数据管理更加复杂,因为单独的存储系统更容易变得不同步或者变得不一致,并且外键会发生意外的变化;

要解决这种问题,需要使用主数据管理(Master Data Management,MDM)工具。MDM工具在后台运行,并且如果它发现任何不一致,就修复它们。

市场上的MDM工具包括:Information 、IBM MDM高级版。Oracle Siebel UCM、Postgres(主数据流复制)、mariadb(主主配置)等等;

6.事务边界

因为每个微服务都表示一个系统。在这种环境中,找到任何给定时刻的整个系统的状态是非常具有挑战性的;

具有描述在任何给定时间哪个微服务拥有一条消息的事务边界是非常重要的。

需要能参与事务的方式或者过程、事务话的路由和错误处理程序、等效使用者和补偿操作。确保跨异构系统的事务性行为不是件容易的事情,但有工具为你做这个工作;

例如:Camel有很强的事务性功能,可以帮助开发人员轻松的创建具有事务性行为的服务;

3.微服务框架和工具

Spring Cloud提供使微服务非常容易的开发所需要的所有工具和平台。Spring Cloud使用Netflix开发源码软件(OOS);

1.Netflix开放源码软件(OSS)

Netflix开发源码软件中心是基于Java的微服务开方源码项目最流行的和最广泛使用的开放源码软件。世界上最成功的视频租赁服务依赖于它。

Netflix是一个纯粹的基于云平台的解决方案,在微服务架构的基础上开发。

1.构建——Nebula

Netflix Nebula使得构建过程更加轻松和高效;

Netflix Nebula是一种使你更加容易使用Gradle(类似于Maven的构建工具)来生成微服务的Gradle插件集合

对于开发人员来讲,最重要的Nebula功能是消除Gradle生成文件中的许多样板代码,这使得开发人员能够把重点放在编码上面;

2.部署于交付——Spinnaker于Aminator

3.服务注册和发现——Eureka

Eureka提供了负责微服务注册和发现的服务。最重要的是,Eureka也用于中间层(承载不同的微服务进程)负载均衡。

4.服务沟通——Ribbon

如果没有进程之间或者服务之间的通信,微服务架构就没有用。功能区应用程序应该提供该功能;

Ribbon和Eureka结合实现负载均衡,与Hystrix结合实现容错或者电路断路器操作;

除了HTTP之外,Ribbon还支持TCP和UDP协议。它对这些协议同时提供了异步和反应式的支持,它还提供缓存和批处理的功能;

5.电路断路器——Hystrix

Hystrix工具用来执行电路断路器操作,也就是说,容忍延迟和容错。因此Hystrix会停止连锁故障。Hystrix执行实时的监控服务和属性更改操作,并支持并发;

一个微服务的故障不应该停止你的整个系统,Hystrix的任务是防止这一点,并在出现故障的时候,向用户提供有意义的信息;

6.边缘(代理)服务器——Zuul

Zuul是边缘服务器或者代理服务器,它用来为外部应用程序如UI客户端或者移动客户端或者服务提供的第三方使用者的API发出的请求提供服务。从概念上来讲,它是一扇面向外部应用程序的门;

Zuul允许动态路由和监控请求。它还执行安全操作,如身份验证。可以确定每个资源的身份验证要求,并拒绝任何不能满足这些要求的请求;

7.业务监控——Atlas

Atlas是一个业务监控工具,它提供了接近实时的高维时间序列数据的信息。它捕获业务,提供目前在系统内发生的情况的概况。它提供内存中的数据存储,这使它能非常快的收集信息和报告大量的指标。

 

一旦你在云环境中部署微服务,你就需要有一个监控系统来跟踪和监控所有的微服务。Atlas为你做这份工作;

8.可靠性监控服务——Simian Army

在云环境中,没有单个组件可以保证100%正常运行时间。

Army保证云环境的安全、可靠好高可用性。

9.AWS资源监控——Edda

在云环境中,没有什么是静态的。例如,虚拟宿主机实例经常发生变化,通常情况下,IP地址可以由各种应用程序重复使用,防火墙或相关的变化也可能发生;

Edda是跟踪这些动态的AWS资源的服务。它记录云管理和部署

10.主机系能监控——Vector

Vector是一个静态的Web应用程序。在web浏览器内运行。它可以用来监控安装了Performance Co-Pilot(PCP)的主机的性能。PCP收集各种指标并提供给Vector;

它是帮助你监控远程主机的性能监控工具;

11.分布式配置管理——Archaius

Archaius是一个分布式的配置管理工具,它允许你执行一下操作:

12.Apache Mesos调度器——Fenzo

13.成本和云利用率——Ice

Ice从成本和使用的角度提供云资源的全景图。它提供调配云资源分配到不同团队的最新信息,为云计算资源的最优利用增加价值;

14.其他安全工具——Scumblr和FIDO

为了跟踪你的微服务,并保护它不受经常的威胁和攻击,需要以自动化的方式对微服务进行保护和监控。Scumblr和FIDO可以做这份工作;

猜你喜欢

转载自blog.csdn.net/qq_36807862/article/details/81284349