第一课 Go容器化微服务系统实战-基本介绍和使用

本文是Go容器化微服务系统实战的第一课,主要介绍了微服务的基本概念、设计原则,深入讲解了gRPC和ProtoBuf,包括它们的用途和优势。并以go-micro框架为例,阐述了如何使用ProtoBuf编写服务端和客户端的简单HelloWorld应用。
摘要由CSDN通过智能技术生成

第一课 Go容器化微服务系统实战-基本介绍和使用

tags:

  • GO
  • 慕课网

categories:

  • GO
  • 微服务
  • go-micro

第一节 GO微服务

1.1 微服务介绍

  1. 微服务首先他是一种架构模式
  2. 微服务相比较单体架构,微服务架构更独立,能够单独更新和发布
  3. 微服务里面的服务仅仅用于某一个特定的业务功能
  4. 特点
    • 逻辑清晰
    • 快速迭代
    • 多语言灵活组合

1.2 微服务与DDD

  1. 领域驱动设计(Domain Driven Design,简称DDD )
  2. 还有个定律:康威定律(Conway’s Law)。就是说组织架构对应我们微服务拆分。
  3. DDD的作用:真正决定软件复杂性的是设计方法
    • 有助于指导我们确定系统边界
    • 能够聚焦在系统核心元素上
    • 帮助我们拆分系统
  4. DDD常用概念-领域
    • 领域:领域是有范围界限的,也可以说是有边界的
    • 核心域:核心域是业务系统的核心价值
    • 通用子域:所有子域的消费者,提供着通用服务(比如电商领域的短信、邮件就属于这个)
    • 支撑子域:专注于业务系统的某一重要的业务
  5. DDD常用概念-界限上下文
    • 理解∶语文中的语境的意思
    • 方式∶领域+界限上下文
    • 目的:不在于如何划分边界,而在于如何控制边界
  6. DDD常用概念-领域模型
    • 理解∶领域模型是对我们软件系统中要解决问题的抽象表达。
    • 领域∶反应的是我们业务上需要解决的问题
    • 模型:我们针对该问题提出的解决方案
  7. DDD域微服务四层架构
    在这里插入图片描述
  8. 上面架构继续拆分就是下面微服务架构。
    在这里插入图片描述

1.3 微服务的设计原则

  1. 要领域驱动设计,而不是数据驱动设计,也不是界面驱动设计
    • 数据驱动设计:系统下来模块拆分完,就设计表结构字段。
    • 界面驱动设计:界面页面缺啥补啥
  2. 要边界清晰的微服务,而不是泥球小单体
  3. 要职能清晰的分层,而不是什么都放的大箩筐
  4. 要做自己能hold住的微服务,而不是过度拆分的微服务

第二节 go-micro基础:gRPC和ProtoBuf

2.1 RPC和gRPC介绍

  1. RPC介绍
    • RPC代指远程过程调用(Remote Procedure Call )
    • 包含了传输协议和编码(对象序列号)协议
    • 允许运行于一台计算机的程序调用另一台计算机的子程序
  2. 使用RPC有什么好处? 简单、通用、安全、效率
  3. gRPC介绍
    • gRPC是一个高性能、开源、通用的RPC框架(背景:谷歌)
    • 基于HTTP2.0协议标准设计开发
    • 支持多语言,默认采用Protocol Buffers 数据序列化协议
      在这里插入图片描述

2.2 ProtoBuf总体介绍

  1. ProtoBuf是一种轻便高效的序列化结构化数据的协议

  2. 通常用在存储数据和需要远程数据通信的程序上

  3. 跨语言,更小、更快、也更简单

  4. 优点:

    • 加速站点之间数据传输速度
    • 解决数据传输不规范问题
  5. Protocol Buffers常用概念:

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

    • singular:表示成员有0个或者一个,一般省略不写
    • repeated:表示该字段可以包含0~N个元素
      在这里插入图片描述
  7. 新建一个proto文件demo。product.proto

syntax = "proto3"; // 版本号

package go.micro.service.product; // 包名

// 定义一个service 驼峰写法 定义服务
service Product {
  rpc AddProduct(ProductInfo) returns (ResponseProduct) {}
}

// 消息格式
message ProductInfo {
  int64 id = 1 ; // 这里不是赋值 而是字段标识符 修饰符省略
  string Product_name = 2; // 这里最好不要超过15 超过15会开两个字节存我们的字段
}

message ResponseProduct {
  
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值