我是一个云API开发人员和架构师,目前正在为美国的一个大型零售客户开发基于谷歌GCP的微服务。
向微服务的转换/实现为公司带来了巨大的挑战。基于我在生产中接触到的微服务经验,我阐述一下面临的这些挑战和解决方案。
我写这篇文章是在2018年6月。此时,微服务体系结构还没有成熟到能够完全解决所有现有的挑战,但是,开源社区和IT产品公司正试图解决所有这些问题。所有关于这一主题的新研究都是基于找到应对新挑战的解决方案。
这些是微服务体系结构和所提出的解决方案面临的十大挑战:
1、数据同步——我们使用异步消息传递平台,通过有事件源体系结构来解决这个问题, 可使用saga设计模式可以解决这一挑战。
2、安全性——API网关可以解决这些挑战。Kong非常流行,并且是开源的,很多公司都在生产中使用它。还可以使用JWT令牌、Spring security和Netflix Zuul/ Zuul2为API安全开发定制解决方案。企业解决方案也可用,比如Apigee和Okta(两步身份验证)。Openshift主要用于公共云安全,比如Red Hat Linux基于内核的安全性和基于名称空间的应用程序到应用程序的安全性。
3、版本控制——这将由API注册和发现API使用动态Swagger API处理,它可以动态更新并与服务器上的使用者共享。
4、服务发现——这将由像Kubernetes和OpenShift这样的API发现工具来解决。它也可以在代码级别使用Netflix Eureka完成。但是,在编排层中执行它会更好,并且可以通过这些工具进行管理,而不是通过代码和配置来执行和维护它。
5、数据过时性——数据库应该经常更新以提供最近的数据。API将从最近更新的数据库中获取数据。还可以在数据库中的每个记录中添加时间戳条目,以检查和验证最近的数据。可以使用缓存并根据业务需求定制可接受的驱逐策略。
6、调试和日志记录——有多种解决方案。通过将日志消息推送到Kafka、谷歌PubSub等异步消息平台,可以使用外部化的日志记录。客户端可以在header中提供一个相关ID,以便在所有pods/Docker容器中跟踪相关日志。此外,可以使用IDE单独在每个微服务上进行本地调试或检查日志。
7、测试——可以通过模拟REST api或集成/依赖api来解决这个问题,这些api不能用于使用WireMock、BDD、Cucumber、集成测试、使用JMeter进行性能测试,以及任何好的分析工具,如Jprofiler、DynaTrace、YourToolKit、VisualVM等。
8、监控——可以使用开源工具,如Prometheus in combination with Grafana by creating gauge and matrices, Kubernetes/OpensShift, Influx DB, Apigee, combined with Grafana, and Graphite.。
9、DevOps支持—可以使用最先进的DevOps工具(如GCP、Kubernetes和Jenkins的OpenShift)来解决微服务部署和支持相关的挑战。
10、容错——如果给定SLA/ETA的API没有响应,可以使用Netflix Hystrix进行熔断处理。
领取专属 10元无门槛券
私享最新 技术干货