我是一名云API开发人员和架构师,目前正致力于为美国的大型零售客户提供基于Google GCP的微服务。java
过渡/实施微服务给组织带来了重大挑战。基于我对生产中的微服务的曝光,我已经肯定了这些挑战和解决方案。数据库
我在2018年6月写这篇文章。目前,微服务架构还没有成熟到足以彻底解决全部现有挑战,可是,开源社区和IT产品公司正试图解决全部这些未解决的问题。关于这一主题的全部新研究都是基于寻找新挑战的解决方案。小程序
这些是微服务架构和提出的解决方案的十大挑战:设计模式
1.数据同步 缓存
– 咱们使用事件源代码架构来使用异步消息传递平台解决此问题。传奇设计模式能够应对这一挑战。安全
2.安全性 服务器
– API网关能够解决这些挑战。Kong很是受欢迎,而且是开源的,而且正在被许多公司用于生产。还能够使用JWT令牌,Spring Security和Netflix Zuul / Zuul2为API安全性开发自定义解决方案。还有企业解决方案,如Apigee和Okta(两步认证)。Openshift用于公共云安全的顶级功能,如基于Red Hat Linux Kernel的安全性和基于命名空间的app-to-app安全性。架构
3.版本控制 app
– 这将由API注册表和发现API使用动态Swagger API处理,动态Swagger API能够动态更新并与服务器上的使用者共享。异步
4. 发现
– 这将由Kubernetes和OpenShift等API发现工具解决。它也能够在代码级使用Netflix Eureka完成。可是,使用业务流程层执行此操做会更好,而且能够经过这些工具进行管理,而不是经过代码和配置进行维护。
5.数据过时
– 应始终更新数据库以提供最新数据。API将从最近更新的数据库中获取数据。还能够为数据库中的每一个记录添加时间戳条目,以检查和验证最近的数据。能够根据业务需求使用可定义的驱逐策略来使用和自定义缓存。
6.调试和记录
– 有多种解决方案。能够经过将日志消息推送到异步消息传递平台(如Kafka,Google PubSub等)来使用外化日志记录。客户端能够在标头中为REST API提供关联ID,以跟踪全部pod / Docker容器中的相关日志。此外,能够使用IDE或检查日志在每一个微服务上单独完成本地调试。
7.测试
– 能够经过模拟REST API或集成/依赖API来解决此问题,这些API不可用于使用WireMock,BDD,Cucumber,集成测试,使用JMeter进行性能测试以及任何良好的分析工具(如Jprofiler)进行测试, DynaTrace,YourToolKit,VisualVM等
8.监控
– 监控能够使用开源工具,如Prometheus与Grafana结合使用,建立仪表和矩阵,Kubernetes / OpensShift,Influx DB,Apigee,结合Grafana和Graphite。
9. DevOps支持
– 使用最早进的DevOps工具(如GCP,Kubernetes和OpenShift与Jenkins)能够解决微服务部署和支持相关的挑战。
10.容错
– 若是给定SLA / ETA的API没有响应,Netflix Hystrix可用于断开电路。