Слова, написанные впереди (про себя)
Чтобы закрепить свои собственные знания, с сегодняшнего дня (08.01.2019) я начну каждую ночь обобщать связанное с этим изучение SpringCloud для самоободрения, самонакопления и подведения итогов жизни.
Подводя итог, в 2018 году мой менталитет более порывистый, чем раньше, с более отвлекающими мыслями, без намерений, и я не смог правильно поразмышлять о себе; по моей единственной ситуации, у меня должно быть больше времени для изучения, улучшения и действительно обогащения сами.
Учиться само по себе нелегко, Будь то для жизни, идеалов или состояния жизни, самое главное - использовать свое сердце, чтобы по-настоящему понять, и быть спокойным и спокойным.
Если вы выбираете сферу IT, вы должны иметь осознание аскетической практики, любая технология находится только на стадии простого и полезного использования (в настоящее время я глубоко этим занимаюсь), что на самом деле далеко не достаточно. Я сначала выучил весеннее облако-ленту со мной и знаю только одну@LoadBalanced
Точно так же я чувствую себя очень опустошенным, и я могу быть беспомощным при столкновении с проблемами, потому что я совсем не усвоил одну вещь, я не понял ее принципа и не осознал ее сути.
В 2019 году я надеюсь, что смогу уйти от жизни, что у меня еще есть время играть в игры по выходным, чтобы я мог обогатиться и преодолеть беспокойство;
В 2019 году я надеюсь, что смогу проявить настойчивость и усердно работать;
Надеюсь, в 2019 году я смогу больше читать и повзрослеть;
В 2019 году я надеюсь, что смогу спокойно противостоять любому давлению в жизни, иметь внутренний драйв, найти девушку и обрести внешний драйв.
Я надеюсь, что каждый раз, когда я вижу это сообщение самому себе, я не забываю о своем первоначальном намерении.
Ладно, сплетни, вот и все.
В микросервисной архитектуре реестр является основной базовой службой.
Он в основном записывает отношения сопоставления между каждой микрослужбой и адресом микрослужбы. Каждая микрослужба регистрируется в этом реестре. Когда микрослужбам необходимо вызывать друг друга, они могут обнаруживать и вызывать микрослужбы из реестра.
Spring Cloud — это готовый микросервисный фреймворк, разработанный с учетом истинной философии микросервисов.
Кто является реестром служб в Spring Cloud? Eureka Server — это реестр служб. Основная конфигурация выглядит следующим образом.
Примечание. В этой статье рассказывается только об Eureka и не рассматриваются такие альтернативы, как Consul и Zookeeper.
1. Добавьте зависимости, pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
</dependency>
2. Добавьте класс входа в программу@EnableEurekaServer
, включите сервер Eureka. Например:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* Created by EalenXie on 2018/12/28 14:13.
*/
@EnableEurekaServer
@SpringBootApplication
public class SpringCloudEurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaServerApplication.class, args);
}
}
3. Автономная версия Eureka Server, настроить application.yml
server:
port: 8761
eureka:
instance:
hostname: localhost # 服务注册中心实例的主机名
lease-renewal-interval-in-seconds: 30 # 客户端向Eureka发送心跳周期(s)
lease-expiration-duration-in-seconds: 90 # Eureka Server接收实例的最后一次发出的心跳后,删除需要等待时间(s)
server:
enable-self-preservation: true # Eureka自我保护模式
client:
register-with-eureka: false # 是否向服务注册中心注册自己
fetch-registry: false # 是否检索发现服务
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 指定服务注册中心的位置
4. Конфигурация кластера Eureka Server (HA, высокая доступность), по сути, заключается в том, чтобы зарегистрироваться как служба с другими реестрами служб, чтобы можно было сформировать группу регистраций служб, которые регистрируются друг с другом, для достижения взаимной синхронизации списков служб. для достижения высокодоступных эффектов. Несколько экземпляров Eureka Server зарегистрированы друг с другом. настроить application.yml
Конфигурация экземпляра 1 сервера Eureka
server:
port: 8761
eureka:
instance:
hostname: localhost # 服务注册中心实例的主机名
server:
enable-self-preservation: true # Eureka自我保护模式
client:
register-with-eureka: true # 是否注册到Eureka Server
fetch-registry: true # 是否检索发现服务
service-url:
defaultZone: http://${eureka.instance.hostname}:8762/eureka/,http://${eureka.instance.hostname}:8763/eureka/
#指定多个服务注册中心的位置,并向服务注册中心注册自己
Конфигурация экземпляра Eureka Server 2
server:
port: 8762
eureka:
instance:
hostname: localhost # 服务注册中心实例的主机名
server:
enable-self-preservation: true # Eureka自我保护模式
client:
register-with-eureka: true # 是否注册到Eureka Server
fetch-registry: true # 是否检索发现服务
service-url:
defaultZone: http://${eureka.instance.hostname}:8761/eureka/,http://${eureka.instance.hostname}:8763/eureka/
#指定多个服务注册中心的位置,并向服务注册中心注册自己
...
Кто зарегистрирован на Eureka Server? Eureka Client является зарегистрированной службой. Базовая конфигурация выглядит следующим образом.
1. Добавьте зависимости, pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2. Добавить над основным классом@EnableDiscoveryClient
, включение этой аннотации позволяет реестру обнаруживать службу, например:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* Created by EalenXie on 2018/12/28 14:45.
*/
@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudEurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaClientApplication.class, args);
}
}
3. Самая базовая конфигурация клиента, application.yml, например:
server:
port: 8090
spring:
application:
name: spring-cloud-eureka-client-application
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
4. Запустите сервер Eureka, войдитеhttp://localhost:8761Вы можете войти на страницу просмотра Eureka Server:
5. Запустите Eureka Client, вы можете увидеть зарегистрированную службу на Eureka Server или посетите:http://localhost:8761/eureka/apps
6. Eureka Client может получать методы запросов для экземпляров службы из центра обслуживания через интерфейс ядра LookupService (базовый класс реализации DiscoveryClient).
package com.netflix.discovery.shared;
import java.util.List;
import com.netflix.appinfo.InstanceInfo;
public interface LookupService<T> {
Application getApplication(String appName);
Applications getApplications();
List<InstanceInfo> getInstancesById(String id);
InstanceInfo getNextServerFromEureka(String virtualHostname, boolean secure);
}
О компании Eureka и ее инструкциях по работе с клиентами
1. О режиме самозащиты Eureka Server:
默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。
但是当网络分区故障发生时,会统计心跳失败的比例,阈值因子默认是0.85,如果阈值比最小值大则表明微服务与Eureka Server之间无法正常通信,这就可能变得非常危险了--因为微服务本身是健康的,此时本不应该注销这个微服务。
Eureka Server通过'自我保护模式'来解决这个问题,当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。
一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。
自我保护模式是一种对网络异常的安全保护措施。使用自我保护模式,而已让Eureka集群更加的健壮、稳定。
2. Об интерфейсе REST API Eureka Server
POST /eureka/apps/{appId} 注册新的实例
DELETE /eureka/apps/{appId}/{instanceId} 注销应用实例
PUT /eureka/apps/{appId}/{instanceId} 应用实例发送心跳
GET /eureka/apps 查询所有的实例
GET /eureka/apps/{appId} 查询指定appId的实例
GET /eureka/apps/{appId}/{instanceId} 查询指定appId和instanceId的实例
GET /eureka/instances/{instanceId} 查询指定的instanceId的实例
PUT /eureka/apps/{appId}/{instanceId}/status?value=OUT_OF_SERVICE 暂停应用实例
PUT /eureka/apps/{appId}/{instanceId}/status?value=UP 恢复应用实例
PUT /eureka/apps/{appId}/{instanceId}/metadata?key=value 更新元数据信息
GET /eureka/vips/{vipAddress} 根据vip地址查询
GET /eureka/svips/{svipAddress} 根据svip地址查询
3. Основные классы Эврики
InstanceInfo : 注册的服务实例,里面包含服务实例的各项属性
LeaseInfo : Eureka用这个类来标识应用实例的租约信息
ServiceInstance : 发现的实例信息的抽象接口,约定了服务发现的实例应用有哪些通用信息
InstanceStatus : 用于标识服务实例的状态,是一个枚举类,主要有状态UP,DOWN,STARTING,OUT_OF_SERVICE,UNKNOWN
EurekaServerConfigBean : Eureka Server的核心配置类,里面包含了Eureka Server的各项核心属性信息
4. Основное действие Eureka, основной интерфейсLeaseManager, базовый класс реализацииInstanceRegistry
package com.netflix.eureka.lease;
import com.netflix.eureka.registry.AbstractInstanceRegistry;
public interface LeaseManager<T> {
void register(T r, int leaseDuration, boolean isReplication);
boolean cancel(String appName, String id, boolean isReplication);
boolean renew(String appName, String id, boolean isReplication);
void evict();
}
服务注册(register) : 其他客户端将自己注册到Eureka上面
服务下线(cancel) : Eureka 删除服务信息
服务租约(renew) : 客户端定时向Eureka发送心跳证明自己存活,Eureka接收到心跳为其维持租约
服务剔除(evict) : Eureka Server的方法,剔除心跳检测过期的服务实例
5. Мониторинг основных действий Eureka, персональный пример кода выглядит следующим образом:
package name.ealen.listener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean;
import org.springframework.cloud.netflix.eureka.server.event.*;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
/**
* Created by EalenXie on 2018/9/20 14:46.
* EurekaServerEventListener 监听Eureka的事件行为
* 注 : EurekaInstanceRegisteredEvent,EurekaInstanceCanceledEvent,EurekaInstanceRenewedEvent
*/
@Component
public class EurekaServerEventListener {
private static final Logger log = LoggerFactory.getLogger(EurekaServerEventListener.class);
/**
* Eureka Server 注册事件
*/
@EventListener
public void eurekaRegister(EurekaRegistryAvailableEvent event) {
//write your logic..........
log.info("Eureka Server Register at timestamp : {}", event.getTimestamp());
}
/**
* Eureka Server 启动事件
*/
@EventListener
public void serverStart(EurekaServerStartedEvent event) {
//write your logic..........
Object source = event.getSource();
if (source instanceof EurekaServerConfigBean) {
EurekaServerConfigBean eureka = (EurekaServerConfigBean) source;
log.info("Eureka ServerConfigBean : {}",eureka);
}
}
/**
* 服务注册事件
*/
@EventListener(condition = "#event.replication==false")
public void instanceRegister(EurekaInstanceRegisteredEvent event) {
//write your logic..........
log.info("Register InstanceInfo : {}",event.getInstanceInfo());
}
/**
* 服务下线事件
*/
@EventListener(condition = "#event.replication==false")
public void instanceCancel(EurekaInstanceCanceledEvent event) {
//write your logic..........
log.info("instanceCancel serviceId : {}",event.getServerId());
}
/**
* 服务续约事件
*/
@EventListener(condition = "#event.replication==false")
public void instanceRenewed(EurekaInstanceRenewedEvent event) {
//write your logic..........
}
}
Eureka会为每个核心动作发布一个相关的事件,我们可以通过监听这些事件来做一些针对性的自定义处理逻辑。
Eureka Server自身注册事件 : EurekaRegistryAvailableEvent
Eureka Server自身启动事件 : EurekaServerStartedEvent
服务注册事件(register) : EurekaInstanceRegisteredEvent
服务下线事件(cancel) : EurekaInstanceCanceledEvent
服务租约事件(renew,续约,发送心跳) : EurekaInstanceRenewedEvent
6. Проверка здоровья Эврики
Spring Boot Actuator предоставляет конечную точку /health
Просто включите проверку работоспособности Eureka, чтобы передать состояние работоспособности с конечной точки на сервер Eureka.
eureka.client.healthcheck.enable: true
Примечание. Это можно настроить только в application.yml, если это настроено в bootstrap.yml, это может привести к плохим последствиям.
Об этом официально заявлено четко:cloud.spring.IO/spring - уродливый...
Настройка и описание параметров сервера и клиента Eureka
Все следующие параметры являются значениями Eureka по умолчанию и могут быть скорректированы по мере необходимости.
Описание параметров на стороне клиента (нехватка места, часть):
eureka.client.register-with-eureka: true 是否注册自己到Eureka Server上面
eureka.client.fetch-registry: true 是否从Eureka Server上面拉取服务信息
eureka.client.enable: true 是否启用Eureka客户端,不启用则不注册到Eureka Server
eureka.client.healthcheck.enable: true 是否启用Eureka健康检查
eureka.client.availability-zones: new HashMap<>() 告诉client有哪些可用的region和zone
eureka.client.filter-only-up-instances: true 是否过滤出InstanceStatus为UP的实例
eureka.client.region: us-east-1 指定该应用实例所在的region,AWS datacenters适用
eureka.client.prefer-same-zone-eureka: true 是否优先使用与该应用相同Zone的Eureka Server
eureka.client.cache-refresh-executor-thread-pool-size: 2 缓存刷新线程池CacheRefreshThread的初始化线程数
eureka.client.registry-fetch-interval-seconds: 30 Eureka client拉取服务注册信息间隔时间(s)
eureka.client.instance-info-replication-interval-seconds: 30 复制实例变化信息到Eureka服务器所需要的时间间隔(s)
eureka.client.eureka-service-url-poll-interval-seconds: 300 轮询Eureka服务端地址更改的间隔时间(s)
eureka.client.eureka-server-read-timeout-seconds: 8 读取Eureka Server信息的超时时间(s)
eureka.client.eureka-server-connect-timeout-seconds: 5 连接Eureka Server的超时时间(s)
eureka.client.eureka-server-total-connections: 200 从Eureka客户端到所有Eureka服务端的连接总数
eureka.client.eureka-server-total-connections-per-host: 50 从Eureka客户端到每个Eureka服务端主机的连接总数
eureka.client.eureka-connection-idle-timeout-seconds: 30 Eureka服务端连接的空闲关闭时间(s)
eureka.instance.metadata-map: new HashMap<>() 指定应用实例的元数据信息
eureka.instance.prefer-ip-address: false 是否优先使用ip地址来替代hostname作为实例hostname字段值
eureka.instance.lease-expiration-duration-in-seconds: 90 Eureka clent最后一次心跳后,Eureka Server剔除需要等待时间(s)
eureka.instance.lease-renewal-interval-in-seconds: 30 客户端向Eureka Server发送心跳周期(s)
Описание параметров на стороне сервера (нехватка места, часть):
eureka.server.enable-self-preservation: true Eureka Server是否开启自我保护模式
eureka.server.renewal-percent-threshold: 0.85 指定每分钟需要收到的续约次数的阙值,如果阈值比最小值大,则自我保护模式开启
eureka.server.eviction-interval-timer-in-ms: 60*1000 指定EvictionTask定时任务的调度频率,用于剔除过期的实例
eureka.server.wait-time-in-ms-when-sync-empty: 1000*60*5 在Eureka服务器获取不到集群里对等服务器上的实例时,需要等待的时间
Кто имеет право использовать и эксплуатировать Eureka Server Как обеспечить его безопасность Базовая HTTP-аутентификация
1. Eureka Server нужно только объединить spring-boot-security, чтобы включить аутентификацию пользователя для Eureka Server. Добавьте зависимость pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2. Измените конфигурацию application.yml:
security:
basic:
enabled: true # 开启基于HTTP Basic的认证
user:
name: ealenxie # 登陆账号名
password: zaxscdvfrewq # 登陆密码
server:
port: 8761
eureka:
instance:
hostname: localhost # 服务注册中心实例的主机名
client:
register-with-eureka: false # 是否向服务注册中心注册自己
fetch-registry: false # 是否检索发现服务
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 指定服务注册中心的位置
3. Кроме того, поскольку spring-boot-starter-security по умолчанию включает проверку csrf, она не подходит для неинтерфейсных приложений, таких как клиентская сторона, и ее можно отключить в настройках.
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@EnableWebSecurity
public class EurekaServerSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.csrf().disable();
}
}
4. Поскольку в Eureka Server включена базовая аутентификация HTTP, Eureka Client также необходимо настроить соответствующую информацию учетной записи для регистрации на Eureka Server.Необходимо изменить application.yml клиента Eureka.
security:
basic:
enabled: true # 开启基于HTTP Basic的认证
user:
name: ealenxie # 登陆账号名
password: zaxscdvfrewq # 登陆密码
server:
port: 8090
spring:
application:
name: spring-cloud-eureka-client-application
eureka:
client:
service-url:
defaultZone: http://${security.user}:${security.password}@localhost:8761/eureka/ #包含账号信息的Eureka Server地址
5. На самом деле, для вышеупомянутой базовой HTTP-аутентификации с точки зрения безопасности, если она открыта для общедоступной сети, ее легко захватить, а затем взломать, поэтому рекомендуется включить https и использовать форму сертификат безопасности и ключ для обеспечения безопасности.
Его реализация может относиться к блогу (из соображений экономии места):www.v2ex.com/t/516287
Или обратитесь к книге «Переопределение Spring Cloud в действии», глава на 61 странице, включите https.
Платформа управления и контроля микросервисов Eureka Admin с открытым исходным кодом
Потому что в стеке технологий Spring Cloud Eureka Server является очень важным базовым компонентом микросервисной архитектуры.
Поэтому китайское сообщество Spring Cloud открыло платформу мониторинга и управления узлами для динамического запуска и остановки служб для реестра Eureka: Eureka Admin.
Администратор Eureka может подключаться к сети, отключаться от сети и останавливать зарегистрированный экземпляр службы, и очень удобно вызывать REST API сервера Eureka. Желающие могут попробовать использовать его.
Основной эффект:
Адрес github администратора Eureka:GitHub.com/springcloud…
Eureka также можно комбинировать с Spring Boot Admin.
1. Вам нужно только создать Spring Boot Admin и зарегистрировать его на сервере Eureka в качестве клиента Eureka для достижения идеальной интеграции. Простой процесс создания Spring Boot Admin выглядит следующим образом, и в pom.xml необходимо добавить следующие зависимости:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 在管理界面中与 JMX-beans 进行交互所需要被依赖的 JAR -->
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2. Добавьте @EnableAdminServer в основной класс, включите Spring Boot Admin и зарегистрируйте его в Eureka.
package name.ealen;
import de.codecentric.boot.admin.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* Created by EalenXie on 2018/11/6 9:23.
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableAdminServer
public class SpringBootAdminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminApplication.class,args);
}
}
3. Просто настройте application.yml, укажите Eureka Server и отключите ограничение доступа к порту безопасности.
server:
port: 8889
spring:
application:
name: spring-cloud-boot-admin
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
management:
security:
enabled: false
4. Запустите приложение Eureka Sever и приложение Spring Boot Admin, а затем посетите localhost:8889, чтобы увидеть интерфейс администратора.
Нажмите кнопку «Подробности», вы можете увидеть различную подробную информацию о конфигурации в Admin, информацию о памяти, количество вызовов интерфейса и даже количество потоков, все это можно увидеть с первого взгляда, что очень удобно.
последние слова
Ссылки в этой статье:
Я много раз ссылался на содержание книги «Переопределение практики Spring Cloud», и лично я очень уважаю ее.
Обратитесь к книге «Весеннее облако и докер» г-на Чжоу Ли.
Обратитесь к книге «Микросервисы Spring Cloud на практике» Чжай Юнчаошен.
Заявление :
Эта статья обобщает содержание и понимание того, чему я научился у разных великих богов, по своему собственному опыту.
Личные таланты и обучение поверхностны.Если будут неуместные сообщения в блоге, я надеюсь, что все боги простят меня и помогут исправить меня.
Оригинальность не так проста, большое спасибо за ваши комментарии и поддержку.