微服务基础知识小结

Coding Alan 4年前 (2020-12-29) 3933次浏览 0个评论 扫描二维码

微服务架构

Martin Fowler

  • 一组小的服务
  • 独立的进程
  • 轻量级通信
  • 基于业务能力
  • 独立部署
  • 无集中式管理

Loosely coupled service oriented architecture(SOA) with bounded context

DDD – Domain Driven Design

– 决定软件复杂性的是设计方法

  • 有助于指导我们确定系统边界
  • 能够聚焦在系统核心元素上
  • 帮助我们拆分系统

DDD 域微服务四层架构

微服务基础知识小结

微服务架构

微服务基础知识小结

微服务设计原则

  • 领域驱动设计,不是数据驱动设计,也不是界面驱动设计
  • 要边界清晰的微服务,而不是泥球小单体
  • 要职能清晰的分层,而不是什么都放的大箩筐
  • 要做自己能hold住的微服务,而不是过度拆分的微服务

康威定律(Conway’s Law)

Docker 应用场景

  • 构建运行环境
  • 微服务
  • CI/CD

微服务基础知识小结

Docker常用命令

  • 仓库操作:pull, push
  • 镜像管理:images, rmi, build
  • 生命周期管理:run, start. stop, rm

go-micro:gRPC和 ProtoBuf

RPC

简单、通用、高效

  • RPC代指远程过程调用(Remote Procedure Call)
  • 包含了传输协议和编码(对象序列号)协议
  • 允许运行于一台计算机的程序调用另一台计算机的子程序

gRPC

  • gRPC是一个高性能、开源、通用的 RPC 框架
  • 基于 HTTP2.0协议标准设计开发
  • 支持多语言,默认采用 Protocol Buffers 数据序列化协议

微服务基础知识小结

Protocol Buffers

  • 是一种轻便高效的序列化结构化数据的协议
  • 通常用在存储数据和需要远程数据通信的程序上
  • 跨语言,更小、更快、更简单
  • 加速站点之间数据传输速度
  • 解决数据传输不规范问题

常用概念

  • Message定义:描述了一个请求或响应的消息格式
  • 字段标识:消息的定义中,每个字段都有一个唯一的数值标签
  • 常用数据类型:double, float, int32/64, bool, string, bytes
  • Service服务定义:在 Service 中可以定义一个 RPC服务接口

Protocol Buffers Message 中字段修饰符

  • singular;表示成员有0个或者一个,一般省略不写
  • repeated:表示该字段可以包含0~N个元素

微服务基础知识小结

.proto类型Java类型C++类型Go语言类型备注
doubledoubledoublefloat64
floatfloatfloatfloat32
int32intintint32可变长编码方式。编码负数时不够高效,如果字段可能包含负数,可以使用sint32
int64longint64int64可变长编码方式。编码负数时不够高效,如果字段可能包含负数,使用sint64。
uint32int[1]uint32uint32
uint64uint64uint64
sint32intint32int32可变长编码方式,有符号的整形值。编码时比int32效率高。
sint64longint64int64可变长编码方式,有符号的整形值,编码时比int64效率高。
fixed32int[1]uint32uint32总是4个字节。如果所有数值均比(2^28)大,该种编码方式比uint32高效。
fixed64long[1]uint64uint64总是8个字节。如果所有数值均比(2^56)大,此种编码方式比uint64高效。
sfixed32intuint32int32总是4个字节。
sfixed64longuint64int64总是8个字节。
boolbooleanboolbool
stringStringStringstring

服务注册:consul, etcd

配置中心:consul, nacos

链路追踪:jaeger (http://localhost:16686)

熔断:hystrix-go CLOSED OPEN HALF_OPEN

  • Timeout
  • MaxConcurrentRequests
  • SleepWindow
  • RequestVolumeThreshold
  • ErrorPercentThreshold

限流:漏桶算法 ratelimit

负载均衡 roundrobin

微服务网关

监控:Prometheus Grafana

日志:Elasticsearch Logstash Kibana Filebeat

Logstash-Filter 数据中间件处理插件 grok

https://www.elastic.co/downloads/past-releases

micro new

K8S 核心组件

微服务基础知识小结

  • 集群管理入口:kube-apiserver
  • 管理控制中心:kube-controller-manager
    • 副本控制器:Replication Controller
    • 节点控制器:Node Controller
    • 资源控制器:ResourceQuota Controller
    • 命名空间控制器:Namespace Controller
    • Endpoints 控制器:Endpoints Controller
    • 服务控制器:Service Controller
  • 调度器:kube-scheduler
  • 配置中心:etcd
  • 集群管理工具:kubectl
  • 节点 POD 管家:kubelet
  • 服务外部代理:kube-proxy

Kompose 转化 docker-compose文件为 Kubernetes 可部署文件

kubectl 常用命令

  • 命令式资源管理
    • create 创建资源
    • expose 暴露资源
    • scale 扩展资源
    • annotate 添加备注
    • label 标签
    • delete 删除资源
  • 资源查看
    • get 显示一个或多个资源的详细信息
    • describe 聚合相关资源信息进行显示,较get 丰富
  • 容器管理
    • log 查看容器日志
    • exec 执行命令
    • cp 从容器与物理机进行文件拷贝

k8s 常用资源类型简写

  • ing:ingress
  • no: 集群nodes节点
  • ns:namespace 命名空间
  • rs:replicasets
  • svc:services 服务
  • ep:endpoints

常见问题

1、undefined: resolver.BuildOption…undefined: resolver.ResolveNowOption

2、panic: qtls.ConnectionState not compatible with tls.ConnectionState

将 go 降级至1.12或1.13,重装安装 go-micro(删除 bin 目录下的 micro 可执行文件)

1.13设置代理

3、Registry consul not found

或micro api malformed HTTP response “\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x05\x00\x00@\x00″

4、undefined: balancer.PickOptions

5、”detail”: “service not found”, “status”: “Internal Server Error”

将注册的微服务namespace修改为go.micro.api

 

 

喜欢 (3)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址