Microservices for Java Developers: Configuration, Service Discovery and Load Balancing
原文地址:
作者介绍:
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
- Introduction
- Configuration
2.1. Dynamic Configuration
2.2. Feature Flags
2.3. Spring Cloud Config
2.4. Archaius - Service Discovery
3.1. JGroups
3.2. Atomix
3.3. Eureka
3.4. Zookeeper
3.5. Etcd
3.6. Consul - Load Balancing
4.1. nginx
4.2. HAProxy
4.3. Synapse
4.4. Traefik
4.5. Envoy
4.6. Ribbon - Cloud
- Conclusions
- 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。
网友评论