博主昵称:跳楼梯企鹅
博主主页面链接:博主主页传送门

博主专栏页面连接:专栏传送门--网路安全技术
创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。
博主座右铭:发现光,追随光,成为光,散发光;
博主研究方向:渗透测试、机器学习 ;
博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;


目录

一、Docker

1.服务docker化

2.私有仓库管理

3.Docker下的服务通讯

二、服务编排

1.Kubernetes

2.Mesos

3.Swarm

三、CICD

1.Gitlab触发构建

2.Jenkins pipeline流水线

3.Kubect操作k8s集群

四、微服务入门

1.微服务入门

2.优势劣势

3.如何通讯

4.如何发现、更新和部署

五、微服务周边

1.SpringBoot

2.SpringCloud

3.Dubbo

六、微服务开发

1.服务划分

2.rpc通讯

3.跨语言调用


一、Docker

1.服务docker化

部署user-service

  • 编写Dockfile文件
#源镜像
FROM golang:1.13#设置工作目录
WORKDIR $GOPATH/srcRUN mkdir user-serviceCOPY user-service $GOPATH/src/user-service#切换工作目录
WORKDIR $GOPATH/src/user-serviceRUN mkdir log#暴露端口
EXPOSE 9090#最终运行docker的命令
ENTRYPOINT  ["nohup","./user-service",">log/log.log", "&"]
  • 编写build.sh脚本
#!/bin/bash
rm -rf user-service
go build .
docker build -t mic-user-service -f Dockerfile .

执行build.sh构建镜像

  • 编写start.sh脚本
#!/bin/bash
docker stop mic_user_service
docker rm mic_user_service
docker run -p 9090:9090 --name mic_user_service -v /usr/local/docker/micservice/user-service/log:/go/src/user-service/log  -d mic-user-service

启动容器 ./start.sh

user-server服务依赖mysql服务,请访问 docker搭建mysql

部署user-edge-service

  • 编写Dockfile文件
#源镜像
FROM golang:1.13#设置工作目录
WORKDIR $GOPATH/srcRUN mkdir user-edge-serviceCOPY user-edge-service $GOPATH/src/user-edge-service
COPY config.ini $GOPATH/src/user-edge-service#切换工作目录
WORKDIR $GOPATH/src/user-edge-service
RUN mkdir log#暴露端口
EXPOSE 9091#最终运行docker的命令
ENTRYPOINT  ["nohup","./user-edge-service",">/dev/null", "&"]
  • 编写build.sh脚本
#!/bin/bash
rm -rf user-edge-service
go build .
docker build -t mic-user-edge-service:latest

执行build.sh构建镜像

  • 编写start.sh脚本
#!/bin/bash
docker stop mic_user_edge_service
docker rm mic_user_edge_service
docker run -p 9091:9091 --name mic_user_edge_service -v /usr/local/docker/micservice/user-edge-service/log:/go/src/user-edge-service/log -d mic-user-edge-service

启动容器 ./start.sh

  • 访问user-edge-service服务测试

    http://172.16.57.110:9091/adapi/login

使用docker-compose编排容器

上面的方式需要一个一个单独启动容器服务,我们可以是用docker-compose来管理容器

  • 安装docker-compose

    yum install docker-conpose

  • 编写docker-compose.yml

version: '3'networks:default:external:name: micservice-networkservices:mysql:image: mysql:5.7ports:- 3306:3306volumes:- /usr/local/docker/mysql/conf:/etc/mysql- /usr/local/docker/mysql/logs:/var/log/mysql- /usr/local/docker/mysql/data:/var/lib/mysqlenvironment:- TZ="Asia/Shanghai"redis:image: redis:5.0.4ports:- 6379:6379volumes:- /usr/local/docker/redis/logs:/usr/local/redis/logs- /usr/local/docker/redis/redis.conf:/etc/redis_default.conf- /usr/local/docker/redis/data:/dataenvironment:- TZ="Asia/Shanghai"mongo:image: mongo:latestports:- 27017:27017volumes:- /usr/local/docker/mongo/data:/data/db- /usr/local/docker/mongo/conf/mongodb.cnf:/etc/mongo.confenvironment:- TZ="Asia/Shanghai"user-service:image: mic-user-service:latestports:- 9090:9090volumes:- /usr/local/docker/micservice/user-service/log:/go/src/user-service/logenvironment:- TZ="Asia/Shanghai"user-edge-service:image: mic-user-edge-service:latestports:- 9091:9091links:- user-servicevolumes:- /usr/local/docker/micservice/user-edge-service/log:/go/src/user-edge-service/logenvironment:- TZ="Asia/Shanghai"
  • 相关命令
#启动所有服务docker-compose up -d #启动某个docker-compose up user-service -d # 停止所有容器服务docker-compose stop

资料来源

2.私有仓库管理

什么是 Harbor ?

  • Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。
  • Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
  • Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。

Harbor的特性:

  1. 基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
  2. 基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。
  3. 支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
  4. 镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
  5. 图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
  6. 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  7. 支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
  8. Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

Harbor的构成:
Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。

1)Proxy: Harbor 的 Registry、 UI、Token 服务等组件,都处在nginx反向代理后边。该代理将来自浏览器、docker clients
的请求转发到后端不同的服务上。

2)Registry:负责储存Docker 镜像,并处理Docker push/pull命令。由于要对用户进行访问控制,即不同用户对Docker 镜像
有不同的读写权限,Registry 会指向一个Token 服务,强制用户的每次Docker pull/push 请求都要携带一个合法的Token,
Registry会通过公钥对Token进行解密验证。

3)Core services:Harbor的核心功能,主要提供以下3个服务:

  • UI (harbor-ui) :提供图形化界面,帮助用户管理Registry上的镜像 (image) ,并对用户进行授权。
  • WebHook:为了及时获取Registry上image 状态变化的情况,在Registry上配置 Webhook, 把状态变化传递给 UI 模块。
  • Token 服务:负责根据用户权限给每个Docker push/pull 命令签发Token。 Docker 客户端向Registry 服务发起的请求,如果不包含Token,会被重定向到 Token 服务,获得 Token 后再重新向Registry 进行请求。

4)Database (harbor -db) :为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。

5)Job services:主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。

6)Log collector (harbor-log) :负责收集其他组件的日志到一个地方。

3.Docker下的服务通讯

1. 每台机器上都有一个网卡,有的甚至有两个网卡 , ETHD 10.1.1.10/8就表示一个网卡

2. docker启动以后, 会出现一个docker0,我们可以通过ifconfig来查看

交换机一旦创建以后, 就会创建一个叫namespace的东西,名字叫做network namespace. 全名叫做网络命名空间.也就是上图中蓝色方框VethX,不同的网络命名空间会形成相互隔离,一端固定在容器内容, 成为虚拟网卡, 另一端固定在本机。

只要多一个容器就会多一个veth。也就是说一端在容器里,另一端在本机里,作为连通的作用。 并且, 网络命名空间会将不同的网络隔离开来,各用个的。这样就实现了隔离,以及怎样与本机进行交互。这样,容器和容器之间就可以通讯了。  这解决的是容器和容器间进行通讯。 这是通过docker0网桥解决的。

二、服务编排

1.Kubernetes

kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

 安装

国内安装k8s途径

  • 使用kubeadmin离线安装
  • 使用阿里公有云平台k8s
  • 通过yum官方仓库
  • 二进制包形式安装,kubeasz

安装kubeadmin加载k8s镜像

# 以下命令在三台虚拟机执行 yz10  yz20  yz21
mkdir /usr/local/k8s-install
cd /usr/local/k8s-install

k8s离线部署

10.211.55.10  yz10   Master节点
10.211.55.20  yz20   Node节点
10.211.55.21  yz21   Node节点
# 1. 调整时区
timedatectl set-timezone Asia/Shanghai
# 2. 关闭selinux和防火墙
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
# 3. k8sadmin镜像下载附带对应的docker
# 4. 镜像上传到每个节点
mkdir -p /usr/local/k8s-install
scp -r kubernetes-1.14 root@yz10:/usr/local/k8s-install# 5. 安装docker,记得配置加速器
tar -xf docker-ce-18.09.tar.gz
cd docker
yum localinstall -y *.rpm# 6. 确认cgroup为 cgroupfs
docker info|grep cgroup
# 7. 安装kubeadm
tar -xf kube114-rpm.tar.gz
cd kube114-rpm
yum localinstall -y *.rpm# 8. 关闭交换区
swapoff -a  #关闭
vi /etc/fstab
# 注释这行 永久关闭
#/dev/mapper/centos-swap swap                    swap    defaults        0 0# 9. 配置网桥
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system# 10. 通过镜像安装k8s
docker load -i k8s-114-images.tar.gz
docker load -i flannel-dashboard.tar.gz

2.Mesos

Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos最初由加州大学伯克利分校的是AMPLab开发的,后在Twitter得到广泛使用。

Mesos是一个分布式的架构,具有主从关系,master和slave。Zookeeper能做到首领选举(选mesos的master)等功能。要注意的是zookeeper也需要选举master。应用程序跑在frameworks上,它也是分布式的软件,包括scheduler和executor。图中蓝色部分是mesos本身,白色部分是需要自己开发的framework。这些需要自己开发的framework也需要考虑高可用性的问题,这算是mesos的缺点之一。Mesos使用protocol buffer和libprocess来进行通信。

1)zookeeper做为leader election。每个master起来的时候都要向zookeeper的quorum注册znode。

2)master主要用于管理slave node的状态,知道slave在哪儿,有哪些资源,同时知道各个框架的信息。比如Hadoop和MPI框架的基本信息。master还可以发resource offer。如果master down了,zookeeper可以马上从standby master里面选一个。因为几个master里面共享的东西很少,不需要数据的同步。

3)slave负责运行任务,同时不断的向master发消息,报告可用资源和在运行的任务的状态。这两种消息并不相同,报告任务状态的消息保证一定delivery,而其他消息并不保证。

4)framwork是一个分布式的应用,包括scheduler和executor。其中scheduler部分要和master紧密通信,接受master发送的offer,scheduler收到offer后决定是不是要跑某个task。executor真正的去执行任务。Offer的发送由master决定。

3.Swarm

Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。
Swarm 和 Kubernetes 比较类似,但是更加轻,具有的功能也较 kubernetes 更少一些。
Docker Swarm 包含两方面:一个企业级的 Docker 安全集群,以及一个微服务应用编排引擎。
集群方面,Swarm 将一个或多个 Docker 节点组织起来,使得用户能够以集群方式管理它们。
Swarm 默认内置有加密的分布式集群存储(encrypted distributed cluster store)、加密网络(Encrypted Network)、公用TLS(Mutual TLS)、安全集群接入令牌 Secure Cluster Join Token)以及一套简化数字证书管理的 PKI(Public Key Infrastructure)。我们可以自如地添加或删除节点。
编排方面,Swarm 提供了一套丰富的 API 使得部署和管理复杂的微服务应用变得易如反掌。通过将应用定义在声明式配置文件中,就可以使用原生的 Docker 命令完成部署。
此外,甚至还可以执行滚动升级、回滚以及扩缩容操作,同样基于简单的命令即可完成。
以往,Docker Swarm 是一个基于 Docker 引擎之上的独立产品。自 Docker 1.12 版本之后,它已经完全集成在 Docker 引擎中,执行一条命令即可启用。到 2018 年,除了原生 Swarm 应用,它还可以部署和管理 Kubernetes 应用。

从集群角度来说,一个 Swarm 由一个或多个 Docker 节点组成。这些节点可以是物理服务器、虚拟机、树莓派(Raspberry Pi)或云实例。唯一的前提就是要求所有节点通过可靠的网络相连。
节点会被配置为管理节点(Manager)或工作节点(Worker)。管理节点负责集群控制面(Control Plane),进行诸如监控集群状态、分发任务至工作节点等操作。工作节点接收来自管理节点的任务并执行。
Swarm 的配置和状态信息保存在一套位于所有管理节点上的分布式 etcd 数据库中。该数据库运行于内存中,并保持数据的最新状态。关于该数据库最棒的是,它几乎不需要任何配置,作为 Swarm 的一部分被安装,无须管理。
关于集群管理,最大的挑战在于保证其安全性。搭建 Swarm 集群时将不可避免地使用 TLS,因为它被 Swarm 紧密集成。
在安全意识日盛的今天,这样的工具值得大力推广。Swarm 使用 TLS 进行通信加密、节点认证和角色授权。自动密钥轮换(Automatic Key Rotation)更是锦上添花!其在后台默默进行,用户甚至感知不到这一功能的存在。
关于应用编排,Swarm 中的最小调度单元是服务。它是随 Swarm 引入的,在 API 中是一个新的对象元素,它基于容器封装了一些高级特性,是一个更高层次的概念。当容器被封装在一个服务中时,我们称之为一个任务或一个副本,服务中增加了诸如扩缩容、滚动升级以及简单回滚等特性。

三、CICD

1.Gitlab触发构建

Jenkins使用配置

安装Gitlab和Blue Ocean插件

安装Role-based Authorization Strategy插件

 Role-based Authorization Strategy插件用于角色的权限管理。

 新建用户,系统管理-->管理用户

 更改认证方式,系统管理 --> 全局安全配置,默认创建的用户登录后可以做任何操作,取决于默认的认证授权方式。

 创建角色,系统管理 --> Manage and Assign Roles

 对角色分配权限

 将用户分配到角色

 登录

2.Jenkins pipeline流水线

关于流水线(Pipline)

Jenkins 从 2.0 开始逐渐从一个 CI 工具转变成为 CD 工具,Pipeline 在其中扮演着至关重要的角色。配置由界面选择逐渐脚本化(采用 Groovy 脚本),我们可以将配置连同代码一起存放在代码仓库,实现版本控制。一次编写,到处运行。

在 Pipeline 中有两个主要关键字需要先简单的了解,可能有些地方还能见到 Step 关键字:

1. Stage:阶段,这其实就是我们将任务细分为多个过程。

2. Node:节点,前面提到过,Jenkins 是可以分布式的,Node 标记着具体在 Master 还是 Slave 运行这个构建。

修改之前的流水线配置

建议写好粘贴进去:

node {stage("拉取代码"){echo 'STEP 1:clone code'}stage("打包代码"){echo 'STEP 2:code package'}stage("上线发布"){echo 'STEP 3:deploy package'}
}

 Pipeline 语法说明

  1. 流水线支持两种语法:声明式和脚本式流水线。两种语法都支持构建持续交付流水线。且均可用在web ui或者Jenkinsfile中定义流水线,通常认为创建一个Jenkinsfile并将其检入源代码控制仓库是最佳实践。
  2. 创建jenkinsfile jenkinsfile是一个文本文件,它包含了Jenkins流水线的定义并被检入源代码控制仓库。下面的流水线实现了基本的三阶段持续交付流水线。 jenkinsfile(declarative pipeline)
pipeline{agent anystages{stage("Build"){steps{echo "building..."}}stage("Test"){steps{echo "Test..."}}stage("Deploy"){steps{echo "Deploy..."}}}
}
  • always: 无论流水线或阶段的完成状态如何,都允许在post部分运行该步骤。
  • changed: 只有当前流水线或阶段的完成状态与它之前的运行不同时,才允许在post部分运行该步骤。
  • failure:只有当前流水线或阶段的完成状态为failure,才允许post部分运行该步骤,通常web ui是红色。
  • success: 只有当前流水线或阶段的完成状态为success,才允许post部分运行该步骤,通常web ui是蓝色或绿色。
  • unstable: 只有当前流水线或阶段的完成状态是unstable,才允许在post部分运行该步骤,通常由于测试失败,代码违规等造成的,通常web ui是黄色的。
  • aborted只有当前流水线或阶段的完成状态是aborted,才允许在post部分运行该步骤,通常流水线被手动的aborted,通常web ui是灰色的。

3.Kubect操作k8s集群

kubectl是k8s的客户端程序,也是k8s的命令行工具,kubectl提供了大量的子命令可以让用户和集群进行交互。

kubectl 连接 Kubernetes 集群

  • 从Kubernetes 版本页面下载最新的 kubectl 客户端。
  • 安装和设置 kubectl 客户端。

    有关详细信息,参见 安装和设置 kubectl。

  • 配置集群凭据。

    您可以在集群信息页面查看集群凭据。

    1. 登录容器服务管理控制台。
    2. 在 Kubernetes菜单下,单击集群进入 Kubernetes 集群列表页面。
    3. 选择所需的集群并单击右侧的管理。
    4. 您可以在连接信息处查看集群的连接地址。
    5. 拷贝集群凭据到本地文件中,您可创建并将集群凭据保存到 $HOME/.kube/config(kubectl 预期凭据所在的位置)。或者命名一个新的文件,如 /tmp/kubeconfig,并执行命令
       export KUBECONFIG=/tmp/kubeconfig。
    6. 执行上述操作后,您可执行以下命令,确认集群连接情况。
# kubectl cluster-info
Kubernetes Master is running at https://xxxxxx.serverless-1.kubernetes.cn-shanghai.aliyuncs.com:6443

四、小结

后期将将微服务器相关知识

【云原生】docker+k8微服务容器化实战相关推荐

  1. 《docker+k8s微服务容器化实践》笔记2

    5-3 集群环境搭建_A  5-4 集群环境搭建_B  5-5 集群环境搭建_C 这次开始动手操作,首先是Mesos的安装,怎么来安装Mesos.源码:https://github.com/limin ...

  2. 实战 Docker+Kubernetes 微服务容器化(二)-微服务带来的问题及解决方案分析

    1 微服务架构带来的问题 2 微服务间如何通讯 2.1 从通讯模式角度考虑 2.2 从通讯协议角度考虑 REST API RPC MQ 最常用的就是 RPC 如何选择 RPC 框架 3 服务发现.部署 ...

  3. 有容云:微服务容器化的挑战和解决之道

    注: 本文根据6月是18日七牛云微服务课堂-微服务容器化的挑战和解决之道演讲内容整理而成,演讲者:有容云联合创始人兼首席架构师马洪喜,与大家一起探讨了如何通过容器技术将微服务和 DevOps 落地. ...

  4. 微服务容器化最短路径,微服务 on Serverless 最佳实践

    简介:阿里云Serverless应用引擎(SAE)初衷是让客户不改任何代码,不改变应用部署方式,就可以享受到微服务+K8s+Serverless的完整体验,开箱即用免运维. 前言 微服务作为一种更灵活 ...

  5. 云原生时代,微服务如何演进?

    简介:云原生时代,微服务和云原生会产生怎样的关系?云原生时代的微服务又有什么特点?当前有哪些比较活跃的微服务项目?阿里巴巴资深技术专家李响从微服务的生命周期.流量治理.编程模型以及可信安全4个方面,分 ...

  6. 当微服务遇上 Serverless | 微服务容器化最短路径,微服务 on Serverless 最佳实践

    简介: 阿里云Serverless应用引擎(SAE)初衷是让客户不改任何代码,不改变应用部署方式,就可以享受到微服务+K8s+Serverless的完整体验,开箱即用免运维. 前言 微服务作为一种更灵 ...

  7. 公开课|百度天工物联网基础平台的微服务容器化落地实践

    本文整理自中信出版社<物联网时代> 在采用IoT的世界中,改变既是IoT引发的,也是你的生活中无法回避的事实. 弗洛伦斯·赫德森,是Internet2(Internet2,即I2,是指由美 ...

  8. 微服务容器化运维:微博容器运维平台DCP

    微服务容器化运维系列的前两期,我给你详细介绍了微服务容器化后如何运维的几个关键问题:镜像仓库.资源调度.容器调度.服务编排,这些问题的产生都是因为微服务部署的节点从一台台物理机或者虚拟机变成了一个个容 ...

  9. AI TALK | 云原生时代的微服务架构与关键技术

    随着云原生与微服务技术的逐步发展,业界也逐步构建出一整套比较完整的微服务技术体系. 面向云原生时代,微服务架构是从业人员绕不开的一个话题,腾讯云AI&腾讯优图的内容风控安全审核能力也与微服务技 ...

最新文章

  1. 走进科学-小菌株大作为—枯草芽孢杆菌替代畜牧业抗生素添加
  2. Codeforces Round #341 (Div. 2) D. Rat Kwesh and Cheese 数学
  3. Linux crontab 命令格式与详细例子
  4. POJ 1386 欧拉路的判定
  5. jzoj5057-[GDSOI2017模拟4.13]炮塔【网络流,最大权闭合图】
  6. ACM一类方程问题的求解[最短路建模] bzoj2118
  7. Debian GNU Linux 4.0 r4
  8. windowblinds 6_过年回家选车很重要!锐骐6强势对比纳瓦拉
  9. 电控无碳小车需要单片机吗_电控无碳小车的设计及研究
  10. Java学习笔记----线程
  11. 【maven】maven dependencyManagement 锁定Jar包版本
  12. 未找到适用于完成此操作的图像处理组件_一张图片竟带来如此风险?苹果操作系统多媒体处理组件暗含严重隐患...
  13. sqoop2 mysql导入hdfs_Sqoop2入门之导入关系型数据库数据到HDFS上(sqoop2-1.99.4版本)
  14. 前端小报 - 201812 月刊
  15. python while true_小疯谈python(十):程序的控制结构
  16. Keil 5安装教程
  17. 倍福嵌入式控制器PLC各型号介绍
  18. donet core 应用 部署到CentOS
  19. 微信朋友圈马赛克图片 —— 抓包破解
  20. 基于MK802 MiniPC的扩展开发应用-软/硬件修改和扩展

热门文章

  1. joomla速度优化_WordPress v Joomla:搜索引擎优化
  2. Java内存区域与Java内存模型
  3. 3年风雨兼程-编程程软件测试终打破测试培训行业乱象
  4. 在2020年开发像TikTok这样的移动应用需要花多少钱?
  5. Redis 列表(List)方法使用详解
  6. 鸿蒙生态菁英难,重磅!华为联合西工大开设“鸿蒙生态菁英班”!
  7. 信创舆情一线--工信部开展APP侵害用户权益专项整治行动
  8. 第一篇——胡咧咧之动漫素材如何最有效最快的查找下载,动漫网站有哪些?
  9. 如何使用计算机勾绘汇水面积,汇水面积怎么计算
  10. matlab pid buck,基于MATLAB的BUCK电路设计与PID闭环仿真