1、介绍

①概要

官网:home (nacos.io)

Nacos:Dynamic Naming and Configuration Service(动态命名和配置服务)

你可以看为:Eureka(注册中心)+Config(配置中心)+Bus(消息总线)

Nacos的支持模式:AP或者CP

②用处

  1. 替代Eureka作为注册中心
  2. 替代Config作为配置中心

2、安装

下载安装Nacos,我使用2.2.0。教学视频还在使用1.x版本,官网已经将2.x标为推荐了

安装包地址:

Releases · alibaba/nacos (github.com)

我使用docker进行安装:

docker网站:nacos/nacos-server - Docker Image | Docker Hub

docker pull nacos/nacos-server

docker运行Nacos:

docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server

查看Nacos控制台:

账号和密码都是nacos

http://服务器ip:8848/nacos/#/login

3、Nacos做注册中心

①版本问题

我们之前使用的Springboot都是2.2.2版本:

Springcloud Alibaba对于版本有着清晰的描述:

所以我们使用2.1.xRELEASE

如果你的版本不同,可以参考下面的网址:

版本说明 · alibaba/spring-cloud-alibaba Wiki (github.com)

②Provider

新建模块cloudalibaba-provider-payment9001

依赖:

<dependencies>
<!--SpringCloud Alibaba nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

yml:

server:
port: 9001 spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: Nacos安装ip:8848 #配置的Nacos地址(本机的写localhost:8848,服务器的写IP地址) #actuator
management:
endpoints:
web:
exposure:
include: '*'

启动类:

@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class, args);
}
}

Controller:

@RestController
public class PaymentController { @Value("${server.port}")
private String serverPort; @GetMapping("/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id){
return "nacos registry, serverPort: " + serverPort + "\t id: " + id;
} }

启动Provider,测试:

搭建另一个个Provider吧,端口为9002,后面要用到

③Consumer(Ribbon)

新建模块cloudalibaba-consumer-nacos-order83

依赖:

<dependencies>
<!--SpringCloud Alibaba nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 引用自己定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>cn.zko0.cloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

yml:

server:
port: 83 spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: 101.43.244.40:8848 #配置的Nacos地址(本机的写localhost:8848,服务器的写IP地址) #消费者要访问的微服务名称(成功注册进nacos的服务提供者)
service-url:
nacos-user-service: http://nacos-payment-provider

启动类:

@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83 {
public static void main(String[] args) {
SpringApplication.run(OrderNacosMain83.class, args);
}
}

这里我们还是用RestTemplate,后面再整合Feign:

注:新的Nacos已经不整合ribbon,所以如果新版本要使用,需要Loadbalance依赖,或者使用openFeign

使用Ribbon需要加上@LoadBalanced

@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}

Controller:

@Slf4j
@RestController
public class OrderNacosController { @Resource
private RestTemplate restTemplate; //从配置文件里读取serverURL
@Value("${service-url.nacos-user-service}")
private String serverUrl; @GetMapping(value = "/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id")Long id){
return restTemplate.getForObject(serverUrl+"/payment/nacos/"+id,String.class);
} }

启动,测试:

④Consumer(Feign)

将上面的Consuemr更改为Feign的调用方式:

<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

注掉config类中的Configuration类,不使用RestTemplate

主启动类:

@EnableFeignClients,激活feign

Service接口:

@Component
@FeignClient(value = "nacos-payment-provider")
public interface PaymentFeignService { @GetMapping("/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Long id); }

修改Controller:

@Slf4j
@RestController
public class OrderNacosController { // @Resource
// private RestTemplate restTemplate;
// //从配置文件里读取serverURL
// @Value("${service-url.nacos-user-service}")
// private String serverUrl;
@Resource
private PaymentFeignService paymentFeignService; @GetMapping(value = "/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id")Long id){
String payment = paymentFeignService.getPayment(id);
return payment;
//return restTemplate.getForObject(serverUrl+"/payment/nacos/"+id,String.class);
}
}

启动,测试,成功:

4、Nacos做配置中心

①基础配置

一.Client(不分Provider和Consumer)

新建模块cloudalibaba-config-nacos-client3377

依赖:

<dependencies>
<!-- nacos config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--SpringCloud Alibaba nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

bootstrap.yml:

server:
port: 3377 spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: ip:8848 #Nacos服务注册中心地址(本机的写localhost)
config:
server-addr: ip:8848 #Nacos作为配置中心地址(本机的写localhost)
file-extension: yml #指定yml格式配置

启动类:

@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}

二.Nacos匹配规则

文档:Nacos 融合 Spring Cloud,成为注册配置中心

官网的配置要求:

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

根据官网的要求,配置名为:

nacos-config-client-dev.yml

三.Nacos配置发布和更新:

Nacos控制台添加配置,发布:

运行3377,测试:

修改version为2,发布,查看配置动态刷新,成功:

②分类配置概念

Nacos的配置通过Namespace+Group+Data ID三者共同构建

设计思想:类似Java中的包名和类名

  • NameSpace用于区分部署的环境

  • Group和DataID逻辑上区分两个目标对象

默认:

Namespace=public,Group=DEAFAULT_GROUP,默认Cluster为DEFAULT

上图的Service就是微服务(整体),一个Service可以有多个Cluster(集群)

Nacos默认Cluster是DEFAULT,Cluster是对一个指定微服务的虚拟划分,比如Service有两个集群,分别在上海和南京。

如上图,Cluster1起名称叫做SH(代表上海的集群),Cluster2起名NJ(代表南京的集群),这样可以让一个机房微服务互相调用。

Instance就是微服务实例,比如Provider实例和Consumer实例

③分类配置实操

一.通过DataID配置(最小)

通过DataID来区别配置:devtest

上面我们配置了dev的配置,下面我们再配置一个test,方法同上次配置。

1.修改nacos配置

2.修改client的active指定

spring:
profiles:
active: test #表示开发环境 dev和test

3.测试,成功:

二.通过Group配置(中)

1.新建配置nacos-config-client-info.yml,设置组为TEST_GROUP

可以看到如果不设置GROUP,默认为DEFAULT_GROUP

2.client项目bootstrap.yml设置gruop配置

3.application.yml修改info(为了对应上面nacos的info)

4.重启测试,成功:

三.通过NameSpace配置(最大)

1.在nacos上新建命名空间:dev和test

2.配置完命名空间后能够看到配置管理的信息:

3.在dev的namespace中创建配置,稍微修改前面的配置:

4.测试:

5、Nacos集群和持久化(重点)

Nacos使用嵌入式的数据库(derby)实现数据的存储,在多节点下,数据存在一致性问题

在前面,我们重启Nacos,数据仍然保留的(就类似于QQ使用SqlLite)

如何解决???

Nacos可以使用集中存储的方式支持集群化部署,目前仅支持Mysql(0.7版本后支持)

①单节点环境搭建

单间点使用Mysql,首先演示解决数据一致性使用Mysql操作

一.环境版本(请务必对应!!)

如果你使用错误的版本会出现许多的问题

经过查询:1.4.0以下使用的mysql驱动是8.0以下的,1.4.0以上使用的驱动就是8.0以上的,使nacos和数据库的版本对应。

  • Mysql8.0

  • Nacos2.2

二.Mysql安装

1.安装启动

 sudo docker run -d -p 3306:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name  mysql mysql:8

2.获取数据库初始化sql脚本mysql-schema.sql

在linux上创建/data/conf文件夹后面使用

docker cp nacos-standalone:/home/nacos/conf/mysql-schema.sql /data/nacos/mysql-schema.sql

该脚本保存至/data/conf下

3.运行sql脚本

三.Nacos配置

注:如果你在这里出错了,容器无法运行,你也无法进入容器修改配置文件。

所以我推荐你使用挂载的方式来运行nacos

下面我们会使用到Nacos的application.properties配置文件,将这个文件挂载到外部,你可以使用我的nacos配置文件,免除启动临时容器复制的麻烦

查看你的nacos版本是否与我一致:2.2.0

application.properties 放在/datat/nacos下

# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_APPLICATION_PORT:8848}
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
# default current work dir
server.tomcat.basedir=file:.
#*************** Config Module Related Configurations ***************#
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
#spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:}
spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.user.0=${MYSQL_SERVICE_USER}
db.password.0=${MYSQL_SERVICE_PASSWORD}
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
### The default token:
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security}
## spring security config
### turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true

1.创建Nacos容器

docker run --name nacos-standalone -e MODE=standalone -e JVM_XMS=256m -e JVM_XMX=256m -e JVM_XMN=128m -p 8848:8848 -v /data/nacos/application.properties:/home/nacos/conf/application.properties -d nacos/nacos-server

2.修改application.properties配置文件

Nacos官网配置信息:

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

3.重启Nacos

4.测试:

在Nacos上配置

查看数据库是否更新

成功!!!

②集群搭建

一.软件与版本

因为我的服务器比较拉,三台肯定顶不住,所以在此仅搭建两台,如果你的服务器牛,可以搭三台

Nginx

Nacos2.2 (两台)

Mysql8

二.Nacos搭建

启动第一台nacos

docker run -d \
--name nacos_11 \
--hostname=nacos_11 \
-e MODE=cluster \
-e NACOS_SERVERS="101.43.244.40:3333 101.43.244.40:4444" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=101.43.244.40 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e JVM_XMS=128m \
-e JVM_XMX=128m \
-e JVM_XMN=64m \
-p 3333:8848 nacos/nacos-server

启动第二台nacos

docker run -d \
--name nacos_22 \
--hostname=nacos_22 \
-e MODE=cluster \
-e NACOS_SERVERS="101.43.244.40:3333 101.43.244.40:4444" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=101.43.244.40 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e JVM_XMS=64m \
-e JVM_XMX=64m \
-e JVM_XMN=32m \
-p 4444:8848 nacos/nacos-server

三.Nginx

配置Nginx1.16.1

这里我拉取的镜像是Nginx1.16.1。

#启动nginx容器(对外暴露1111端口)
docker run -d --name nginx1.16.1 -p 1111:80 nginx:1.16.1

进入nginx容器,修改配置

因为nginx容器没有装vim,所以我们要先安装vim

apt-get update
apt-get install vim

备份nginx.conf文件

cp nginx.conf nginx.conf.bk

修改nginx.conf文件

upstream cluster{
server 10.211.55.17:3333;
server 10.211.55.17:4444;
} server{
listen 80;
server_name 101.43.244.40; location / {
proxy_pass http://cluster;
}
}

四.修改Client

修改client,使用nginx虚拟地址,让nginx转发给三台Nacos,实现注册到Nacos

Nacos入门的更多相关文章

  1. Nacos入门学习&实践

    文中涉及到了一些模块代码没有给出,我一并上传到github了,可以整个项目clone下来进行调试. 地址:https://github.com/stronglxp/springcloud-test 1 ...

  2. Spring Cloud Alibaba Nacos 入门

    概览 阿里巴巴在2018年7月份发布Nacos, Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.并表示在6-8个月完成到生产可用的0.8版本,目前版本是0.9版本. Na ...

  3. Spring Cloud 系列之 Alibaba Nacos 注册中心(一)

    前言 从本章节开始,我们学习 Spring Cloud Alibaba 相关微服务组件. Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 致力于提供微服务开发 ...

  4. Spring Cloud Alibaba入门篇

    学习条件 了解web三层架构 熟练应用SSM架构 了解Maven管理工具的使用 熟练使用SpringBoot,以及了解SpringBoot基本原理. 了解部分术语:应用.工具.耦合.负载等 温馨提示: ...

  5. Spring Cloud - Nacos注册中心入门单机模式及集群模式

    近几年微服务很火,Spring Cloud提供了为服务领域的一整套解决方案.其中Spring Cloud Alibaba是我们SpringCloud的一个子项目,是提供微服务开发的一站式解决方案. 包 ...

  6. Spring Cloud Alibaba入门实战之nacos(一)

    Spring Cloud Alibaba入门实战之nacos(一) 前情介绍 ​ Spring Cloud Alibaba 是阿里巴巴提供的新一代的微服务解决方案,相信会有越来越多采用微服务架构的公司 ...

  7. (十八)整合Nacos组件,环境搭建和入门案例详解

    整合Nacos组件,环境搭建和入门案例详解 1.Nacos基础简介 1.1 关键特性 1.2 专业术语解释 1.3 Nacos生态圈 2.SpringBoot整合Nacos 2.1 新建配置 2.2 ...

  8. nacos配置服务入门

    1.nacos服务端部署 参见官方文档:https://nacos.io/zh-cn/docs/quick-start.html 2.nacos配置中心功能使用 在pol文件中添加依赖: 在启动类中使 ...

  9. SpringBoot2 整合Nacos组件,环境搭建和入门案例详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Nacos基础简介 1.概念简介 Nacos 是构建以"服务"为中心的现代应用架构,如微服务范式.云原生范式等服务基础 ...

  10. 阿里开源服务发现组件 Nacos快速入门

    最近几年随着云计算和微服务不断的发展,各大云厂商也都看好了微服务解决方案这个市场,纷纷推出了自己针对微服务上云架构的解决方案,并且诞生了云原生,Cloud Native的概念. 云原生是一种专门针对云 ...

随机推荐

  1. 深度探索Go语言:包装方法

    问题1:什么是包装方法? 下面咱们来验证下包装方法的存在: 首先,定义一个Point类型,表示一维坐标系内的一个点,并且按照Go语言的风格为其实现了一个Get方法和一个Set方法. package g ...

  2. ubuntu 18.04安装tensorflow (CPU)

    在已经安装anaconda环境及pip之后. 添加并设置pip配置文件: mkdir ~/.pip vim ~/.pip/pip.conf pip.conf文件内容: [global] index-u ...

  3. 前端学习 linux —— 软件安装(Ubuntu)

    软件安装(Ubuntu) 本篇主要讲解 ubuntu 中软件的安装.apt 的源.内网部署案例(graylog 为例),最后是 python 开发准备. apt 和 rpm 在linux 第一篇我们知 ...

  4. Linux deb系统 nginx 配置解析php

    如果你是root用户可以不加sudo 首先安装php php-fpm nginx sudo apt-get install php php-fpm nginx -y nginx 是一个轻量级的http ...

  5. Flink SQL管理平台flink-streaming-platform-web安装搭建

    文章都在个人博客网站:https://www.ikeguang.com/ 同步,欢迎访问. 最近看到有人在用flink sql的页面管理平台,大致看了下,尝试安装使用,比原生的flink sql界面确 ...

  6. JavaScript Promises, async/await

    new Promise() 的时候,传一个 executor 给 Promise. let promise = new Promise(function(resolve, reject) { // t ...

  7. ChatGPT 会开源吗?

    最近,我被一款叫做 ChatGPT 的人工智能(AI)聊天机器人,刷屏了.网上有人说它是搜索引擎杀手,还有人说它将取代程序员... 最后,我还是没扛住铺天盖地的赞美,跑去注册了个账号,抱着调侃&quo ...

  8. Python开发Brup插件检测SSRF漏洞和URL跳转

    作者:馒头,博客地址:https://www.cnblogs.com/mantou0/ 出身: 作为一名安全人员,工具的使用是必不可少的,有时候开发一些自己用的小工具在渗透时能事半功倍.在平常的渗透测 ...

  9. DHorse日志收集原理

    实现原理 基于k8s的日志收集主要有两种方案,一是使用daemoset,另一种是基于sidecar.两种方式各有优缺点,目前DHorse是基于daemoset实现的.如图1所示: 图1 在每个k8s集 ...

  10. [python]《Python编程快速上手:让繁琐工作自动化》学习笔记6

    1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议.SMTP 规定电子邮件应该如何格式化.加密.在邮件服务器之间传递,以及 ...