微服务学习五--微服务或API网关
微服务或API网关主要提供Http Rest接口服务,也可以是SOAP Web Service服务。主要步骤:服务的接入和注册
相关策略配置,日志,安全,流控,负载均衡等
1、对于安全,一个是对OAuth 2.0 Authentication的支持,一个是对Token令牌安全的支持,还有就是对IP访问控制和授权,这些都是最基本的安全控制策略。在一个微服务架构的实施过程中,实际上我们可以约定一种标准的安全控制方式,比如对于Token的生成和校验规则约定等。
2、对于日志,一个方面是可以配置是否记录日志,日志记录到什么程度。另外就是还可以继续优化当前的日志记录方式,即可以配置具体记录日志的时间段,也可以配置针对那些IP请求或消费端系统记录日志,哪些不记录日志,那么这样日志记录和审计功能就更加强大。
3、对于IP,除了最基本的IP访问授权配置外,还需要提供IP白名单,黑名单配置,黑白名单的设计很有用,因为有些特殊情况往往并不能简单的启用IP控制。同时有了IP黑白名单配置功能后,还可以通过该功能快速的对某个消费系统进行服务访问控制和限流。
4、对于微服务网关,设计合理的流量控制策略,处理好限流和断流熔断的关系是最难的。
大并发异常访问是经常需要进行控制的一个点,如何控制,实际上你没有办法控制调用并发量,只能够是控制分配给该服务的最大线程数,而不是让该服务调用占有完所有的可用线程池资源。在某个服务的线程池大小受到控制后,那么服务就会在外进行排队,由并行改为串行,这种方式减小了服务网关的压力,同时造成的影响就是消费端的系统接口调用可能会出现长时间等待并超时。
如果一个服务有多个消费方在消费和调用,那么这种线程池大小的控制还需要细分到每个消费方,否则就直接导致A系统的大并发调用影响到B系统对同一个接口服务的消费。
异常熔断是另外一个场景场景,即对于一个服务调用出现大量的异常的时候进行熔断,这种异常一方面可能是消费端调用输入有关,也可能是提供端本身服务出现异常或问题导致。在这种情况下我们可以考虑单位时间内如果异常错误大于某个阈值就出发熔断机制。
接口服务调用异常,最怕的是由于异常导致的服务调用超时,而这个超时时间本身设置的又比较大,比如10分钟,那么就会导致这个连接一直会被占用10分钟,因此这个服务如果是大并发在调用可想而知,会很快的消耗完所有的可用连接和线程池资源,而影响到整个微服务网关的运行,因此这种情况必须处理。
可以增加了一个大数据报文限流,这个功能本身也很有用,即当我们发现输入的报文或输出的报文大于我们设定的某一个阈值后,就直接断开连接并抛出异常。通过这种限流设计,可以防止微服务网关的内存被快速的耗尽而导致的内存溢出,整个Server宕机的问题。
5、日志监控和报文记录
对于日志监控和报文记录,是微服务网关和治理平台的一个关键能力。在注册和接入的基本都是Http Rest API接口后,我们发现日志的查询不能是简单的实例号ID,而必须支撑关键字查询能力,能够实现对输入和输出报文的全文检索能力。
在这里可以看到,对于微服务网关平台,启用Solr全文检索是必须的,同时要启用类似Redis,MongDB或Hdfs等Key-Value数据库或分布式文件存储系统对报文数据进行存储和记录。一个方面是方便对存储库进行动态弹性扩展,一个方面是方面后期全文检索的实现。
当然,对于是否能够完全使用Solr,既实现持久化存储,又实现全文检索,还需要进一步分析。
6、其它一些辅助功能的实现
Http API接口的在线测试功能是必须的,提供这些API接口的在线测试能力。类似当前的Open API平台,基本都提供这种API接口服务的在线测试功能。
帮助文档的自动生成,参考输入样例的自动生成,任何一个API接口服务接入后,都需要提供帮助文档的生成能力,也方面消费方在使用和消费该接口服务的使用和查看。当然对于生成的为帮助文档,还可以进行手工的修改,包括接口服务的使用场景说,字段的详细描述说明,使用建议等。
如果考虑更好的实现业务系统的自服务,那么最好还提供具体的服务调用和消费代码示例片段,以方便业务系统的开发和实现,这也是当前主流OpenAPI平台的做法。
微服务首先定义数据或对象模型,然后将对象模型转换为Http Rest中的资源对象,并发布对应的Get , Post各种Http Rest接口服务。
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
Solr特点
Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
工作方式
文档通过Http利用XML 加到一个搜索集合中。查询该集合也是通过http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等。