建一个类似淘宝的网站需要多少钱,视频外链在线生成,医疗网站的运营,有哪些静态网站微服务入门#xff08;go#xff09;
和单体服务对比#xff1a;里面的服务仅仅用于某个特定的业务
一、领域驱动设计#xff08;DDD#xff09;
基本概念
领域和子域 领域#xff1a;有范围的界限#xff08;边界#xff09; 子域#xff1a;划分的小范围 核心域…微服务入门go
和单体服务对比里面的服务仅仅用于某个特定的业务
一、领域驱动设计DDD
基本概念
领域和子域 领域有范围的界限边界 子域划分的小范围 核心域业务系统的核心价值 通用子域为所有子域提供通用子域 支撑子域专注于业务的某一重要子域 举例
电商——领域商品子域订单子域销售子域……——子域销售子域——核心子域邮件子域短信子域——通用子域
界限上下文
目的如何控制边界
领域模型
领域对需要解决问题的抽象
模型针对问题提出的解决方案 领域服务四层架构主要分为接口层应用层领域层基础层四个部分
完整的DDD微服务相关的流程如下 ps:要领域驱动而不是数据驱动设计也不是界面驱动设计 确实一般的都是数据驱动设计 ps要边界清晰而不是很小的单体也不能过度拆分 二、Docker
为什么需要docker
部署更新低效环境一致性难保证构建容易分发难环境上的复刻
应用场景
构建运行环境微服务CICD持续集成和部署
重要概念
client——可以运行docker的命令服务器进程——管理镜像和容器镜像仓库——存储镜像的仓库
docker架构的示意图 ps : docker daemondocker的守护进程 Docker常用命令
◆Docker 仓库操作:pullpush ◆Docker 镜像管理:imagesrmibuild ◆Docker生命周期管理:runstartstoprm
查看docker版本 sudo docker version拉取镜像
sudo docker pull nginx出现了报错 报错解决方案
按顺序执行下面的代码主要功能是修改了docker的配置文件
vim /etc/docker/daemon.json进入了这个可能是空白的文件后输入
{registry-mirrors: [https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com,https://docker.m.daocloud.io,https://hub-mirror.c.163.com,https://mirror.baidubce.com,https://your_preferred_mirror,https://dockerhub.icu,https://docker.registry.cyou,https://docker-cf.registry.cyou,https://dockercf.jsdelivr.fyi,https://docker.jsdelivr.fyi,https://dockertest.jsdelivr.fyi,https://mirror.aliyuncs.com,https://dockerproxy.com,https://mirror.baidubce.com,https://docker.m.daocloud.io,https://docker.nju.edu.cn,https://docker.mirrors.sjtug.sjtu.edu.cn,https://docker.mirrors.ustc.edu.cn,https://mirror.iscas.ac.cn,https://docker.rainbond.cc]
}重新加载配置文件和重启docker服务
systemctl daemon-reload
systemctl restart docker再次拉取 成功
查看现有的镜像
docker images查看在运行的镜像 三、go-mirco
rpc
远程过程调用包含了传输协议和编码协议不同计算机之间的程序可以进行调用
grpc
基于http2.0是Google开发的默认支持protocol buffers数据序列化协议
protocol buffers
是一种轻便高效的结构化数据的协议通常用于存储数据和需要远程数据通信的程序上
优势跨语言更小更快更简单
常用概念
message描述了一个请求或者响应的消息格式字段标识消息的定义中每个字段都有唯一的数值标签
不可以重复
常用数据类型doublefloatint32/int64boolstringbytesService服务的定义在service里面可以定义一个rpc服务接口
Protocol Buffers 数据类型与 Go 数据类型的对应
Protocol Buffers 类型Go 类型描述doublefloat64双精度浮点数64 位floatfloat32单精度浮点数32 位int32int32有符号整型32 位int64int64有符号整型64 位uint32uint32无符号整型32 位uint64uint64无符号整型64 位sint32int32有符号整型32 位采用 ZigZag 编码适合存储负数sint64int64有符号整型64 位采用 ZigZag 编码适合存储负数fixed32uint32无符号整型32 位占用固定 4 字节存储fixed64uint64无符号整型64 位占用固定 8 字节存储sfixed32int32有符号整型32 位占用固定 4 字节存储sfixed64int64有符号整型64 位占用固定 8 字节存储boolbool布尔值表示 true 或 falsestringstringUTF-8 编码的字符串bytes[]byte二进制数据枚举类型 (enum)自定义生成的枚举类型Protobuf 枚举会在 Go 中生成一个对应的枚举类型消息类型 (message)自定义生成的结构体类型Protobuf 消息会在 Go 中生成一个对应的结构体类型
编写protocol buffer的格式规范 protocal buffer示例
syntax proto3;package go.mirco.service.product;
option go_package ./;product;
service Product {rpc AddProduct (ProductInfo) returns (ResponseProduct){}
}message ProductInfo {int64 id 1 ;string product_name 2 ;// 尽量用1-15超过15会用俩字节去装
}message ResponseProduct{int64 product_id 1 ;}生成对应的.go和.micro.go文件
打开终端输入以下命令
protoc --go_out./ --micro_out./ ./proto/account/account.proto上面的命令执行后我们会发现同级目录多了两个go文件这就是自动生成好的编译之后的文件。
命令解释
–go_out 指定当前的目录./–micro_out 指定当前micro目录././proto/account/account.proto 指定要编译的.proto文件地址 生成的文件的效果如下
go-mirco
mirco
是用于构建和管理分布式程序的生态系统
组成部分 runtime运行时——管理认证配置网络等 是一个工具集名称是“micro” 安装版本复杂 所以一般是用docker安装和配置 组成: api:api网关broker异步消息的代理network网络工具集不常用new服务模版生成器重要proxy建立在go-mirco的透明代理registry服务资源管理器通过注册表的方式store简单状态存储web仪表盘可以浏览自己的服务 framework程序开发框架——便于编写微服务 clients多语言的客户端
go-mirco
是对分布式系统的高度抽象提供分布式系统开发的核心库属于可插拔按需使用的架构
组件
注册registry提供服务发现机制选择器selector实现负载均衡传输transport服务与服务的通信组件broker异步消息发布订阅的接口codec消息的编码和解码server服务端client客户端
go-mirco结构图 消息通信架构图 省略了codec