基于REST微服务的5个最佳实践
微服务现在已经很流行了,如果想让微服务架构开发变得友好,而且可以让开发者管理起来轻松一些,跟踪误差更容易,那么只要遵循本文中所述的5个最佳实践就可以了。
1.用户代理:在请求头里面命名有意义的名字是非常重要的,如果出现了类似于系统运行缓慢,内存访问量骤增,甚至出现飙升的情况,那么从该微服务发起的请求头中,开发人员就可以很容易定位问题。在服务请求头的User-Agent属性提供逻辑名称/{service id },这就是一个最佳实践。例:User-Agent:EmployeeSearchService
2.API版本控制:在基于REST的架构中,微服务之间是通过API互相访问对方资源。在微服务里面,API就充当着接口的角色。在编写API时,头脑一定得清晰,确保这样API不会经常变更,这件事非常重要,因为其它的微服务会调用改API,所以API方法签名只要发生调整,代码也就需要跟着进行调整。但是改变是不可避免的,因为我们不知道未来会发生什么,这真的是很讽刺的一件事,所以今天的商业策略可能在几天以后就要被淘汰掉,因此API也就必须进行修改。
作为一名架构师,面临的最大挑战就是如何应对这些变化。答案就是版本维护。对于那些重大的变化,你可以在更新API版本的同时,给消费者发起通知,告知它已经有了新版本,这样他们就可以在既定期限内迁移到新版本。在这个时间内,作为API提供者,就必须维护两个版本,然后不断发送重要通知给消费者,让他们的代码库调用新版本,在这之后,就不再需要维护旧版本了。
3.相关ID:很多人都知道在微服务的架构中,业务功能是分布在多个微服务里面,所以从客户端内部发出的某个请求会扇出许多单独的请求,最大的原因就是有可能某个微服务变慢了,或者down掉了。但作为一名开发人员需要知道在微服务森林如何定位出哪个微服务变慢了,所以我们需要在逻辑上对请求进行分组。为客户端请求生成一个随机的UUID,然后将该UUID传递到每个内部请求中,因此在日志里面就可以通过UUID进行追踪,然后找到相应的调用轨迹。
4.ELK实现:微服务是用来自动定量的,所以在某个复杂的业务领域中是很难管理微服务的日志文件。假设在某个系统中包含了50个微服务,每个每个服务有10个实例;那将会生成50 * 10 = 500个日志文件。作为开发人员,不可能登录到每个实例,然后收集日志,再去调查问题,所以我们需要一个集中的机制,这样所有的日志都可以导出,然后在日志中再做一些智能搜索,比如找出错误或某个特定的异常,再或者还可以通过主机以及相关ID等进行搜索。ELK提供了这一功能,E代表ElasticSearch,L是Logstash,K是Kibana。ElasticSearch会转储日志,也提供了模糊搜索的功能,Logstash用于从不同来源收集日志,然后对它们进行转换,Kibana是一个图形用户界面,开发人员可以搜索他们需要的日志。或者还可以使用Splunk或其他开源框架分析日志。
5.弹性实现:如上面所描述的那样,在微服务架构中,想要完成某个业务功能可能会涉及很多的微服务。最常见的情形就是某个微服务挂掉了,导致整个流程都停止了。针对于这种情况,弹性就显得至关重要了,每个服务都应该实现弹性,从而为最终用户提供无缝体验。当某个服务在一定时间里没有响应,应该配置一个后备路径,这样用户就不需要等待响应,但是会立即得到一个内部错误的提示。其实从本质上来说这就是一个响应设计。
6.结论
在构建基于REST的微服务时,需要考虑两个方面:
用户体验
开发人员的视角
用户不喜欢等待,他/她需要一个很明确的信息,不是指技术信息,而是指当内部出现某个问题时,可以告诉他/她发生了什么,他/她就可以正常联系服务台。另一方面,为微服务提供支持的时候,我们需要知道的所有重要信息都在日志中,事件发生后,需要基于日志进行分析。在开发的时候如果总能站在支持的角度进行思考,这样你就可以跟踪流程,从日志文件中也可以获取到足够的信息。
原文:5 Best Practices for REST-Based Microservices 作者:Shamik Mitra 翻译:Vincent
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置
前言 项目中用到文件服务器,有朋友推荐用fastdfs,所以就了解学习了一番,感觉确实颇为强大,在此再次感谢淘宝资深架构师余庆大神开源了如此优秀的轻量级分布式文件系统,本篇blog就记录一下fastdfs的最新版本5.0.5在centos7中的安装与配置。 简介 首先简单了解一下基础概念,FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。FastDFS的系统结构图如下: 如上图,FastDFS的两个核心概念分别是: Tracker(跟踪器) Storage(存储节点) Tracker主要做调度工作,相当于mvc中的controller的角色,在访问上起负载均衡的作用。跟踪器和存储节点都可以由一台或多台服务器构成,跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务,其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力...
- 下一篇
总结:JDK1.5-JDK1.8各个新特性【转】
JDK各个版本的新特性 以下介绍一下JDK1.5版本到JDK1.7版本的特性及JDK1.8主要部分特性。仅供参考。 JDK1.5新特性 1:自动装箱与拆箱: 自动装箱:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中。 自动拆箱:每当需要一个值时,被装箱对象中的值就被自动地提取出来,没必要再去调用intValue()和doubleValue()方法。 自动装箱,只需将该值赋给一个类型包装器引用,java会自动创建一个对象。 自动拆箱,只需将该对象值赋给一个基本类型即可。 java——类的包装器 类型包装器有:Double,Float,Long,Integer,Short,Character和Boolean 2:枚举 把集合里的对象元素一个一个提取出来。枚举类型使代码更具可读性,理解清晰,易于维护。枚举类型是强类型的,从而保证了系统安全性。而以类的静态字段实现的类似替代模型,不具有枚举的简单性和类型安全性。 简单用法:JavaEnum简单的用法一般用于代表一组常用常量,可用来代表一类相同类型的常量值。 复杂用法:Java为枚举类型提供了一些内置的方法,同事枚举常量...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7设置SWAP分区,小内存服务器的救世主