2019-05-27 JAVA技术栈:微服务的配置,服务发现,负载均衡框架介绍

Microservices for Java Developers: Configuration, Service Discovery and Load Balancing

原文地址:

https://www.javacodegeeks.com/2019/05/microservices-configuration-service-discovery-load-balancing.html?utm_source=sendpulse&utm_medium=push&utm_campaign=1376786

作者介绍:

About Andrey Redko

Andriy是一位有良好基础的软件开发人员,拥有超过12年的使用Java / EE,C#/ .NET,C ++,Groovy,Ruby,函数式编程(Scala),数据库(MySQL,PostgreSQL,Oracle)和NoSQL解决方案的实践经验( MongoDB,Redis)。

1.配置,服务发现和负载平衡 - 简介

在本教程的这一部分中,我们将讨论三个主要主题:配置,服务发现和负载平衡。

我们的目标是了解基本的基本概念,而不是涵盖所有可用的选项。

Table Of Contents

Table Of Contents

  1. Introduction
  2. Configuration 2.1. Dynamic Configuration 2.2. Feature Flags 2.3. Spring Cloud Config 2.4. Archaius
  3. Service Discovery 3.1. JGroups 3.2. Atomix 3.3. Eureka 3.4. Zookeeper 3.5. Etcd 3.6. Consul
  4. Load Balancing 4.1. nginx 4.2. HAProxy 4.3. Synapse 4.4. Traefik 4.5. Envoy 4.6. Ribbon
  5. Cloud
  6. Conclusions
  7. What’s next

2.配置 您的每个微服务的配置很可能会因环境而异。它完全没问题,但提出了一个问题:如何告诉有问题的微服务使用什么配置?

许多框架提供了不同的配置管理机制(如配置文件,配置文件,命令行选项......),但我们在这里提倡的方法是遵循十二因子应用程序方法。

十二因子应用程序将配置存储在环境变量中(通常缩写为env vars或env)。在不更改任何代码的情况下,可以在部署之间轻松更改Env变量;与配置文件不同,它们几乎没有机会被意外地检入代码仓库;与自定义配置文件或其他配置机制(如Java系统属性)不同,它们是与语言和操作系统无关的标准。 - https://12factor.net/config

环境变量仅表现出一个主要限制:它们本质上是静态的。其值的任何更改都可能需要重新启动完整的微服务。对于许多人来说这可能不是问题,但通常希望在运行时具有某种灵活性来修改服务配置。

2.1。 动态配置(Dynamic Configuration) 无需重新启动服务即可更新配置是一项非常吸引人的功能。 但是要支付的价格也很高,不是太多的框架或库提供这种透明的支持。

例如,让我们考虑动态更改数据库JDBC URL连接字符串。 不仅必须透明地重新创建基础数据源,还必须重新初始化JDBC连接池。

动态配置背后的机制实际上取决于您使用的配置管理方法(Consul,Zookeeper,Spring Cloud Config,...),但是某些框架(例如Spring Cloud)会承担更多的负担。

2.2。 功能标志(Feature Flags) 功能标记(或功能切换)不会精确地落入配置存储桶中,但它是动态更改服务或应用程序特征的一种非常强大的技术。 它们非常有用,广泛用于A / B测试,推出新功能,引入实验功能,仅举几个方面。

在Java生态系统中,FF4J可能是功能标志模式最流行的实现。 另一个图书馆是Togglz,但这些天它没有得到积极维护。 如果我们不仅仅是Java,那么值得关注的是Unleash,一个企业就绪功能可以切换服务。 它拥有令人印象深刻的SDK列表,可用于许多编程语言,包括Java。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券