2024年5月

微服务概述

  • 单体架构

    • 尽管在设计上也是模块化的设计逻辑,但是打包还是会打包在一起,其中最主要的问题就是这个应用太复杂,导致应用无法扩展,可靠性低,最终单体敏捷性开发和部署都变的无法完成

  • 微服务起源

    • 微服务是SOA服务的一种实践

    • 小即使美:小的服务代码少,bug少,容易测试,容易维护,也可以更容易不断迭代完善

    • 单一职责:一个服务只做好一件事

    • 可移植性比效率更重要

    • 尽可能早的创建模型

  • 微服务定义

    围绕业务功能构建,服务关注单一业务,服务间采用轻量级通信机制,可以全自动独立部署,可以使用不同的编程语言和数据存储技术,微服务架构通过业务拆分实现服务组件化,通过组件组合快速开发系统,业务单一的服务组件又可以独立部署,使得整个系统变的灵活

    • 原子服务

    • 独立进程

    • 隔离部署

    • 去中心化服务治理

  • 微服务的不足

    • 微服务应用是分布式系统,由此会带来固有的复杂性,开发者不得不用RPC进行消息传递,实现进程之间的通信

    • 分区的数据库结构:在微服务架构应用中,需要更新不同服务所使用的不同的数据库,从而对开发者提出了更高的挑战

    • 测试一个机遇微服务架构的应用也是很复杂的任务

    • 服务模块之间的依赖

    • 对运维要求较高

  • 组件服务化

    传统实现组件的方式是通过库,库的局部变化意味着整个应用重新部署,通过服务来实现组件,意味着应用拆散为一系列服务运行在不同的进程中

    • Kit:一个微服务的基础库

    • Service:业务代码 + kit依赖 + 第三方依赖组成的业务微服务

    • rpc + message queue : 轻量级通信

  • 去中心化

    • 数据去中心化

    • 治理去中心化

    • 技术去中心化

  • 基础设施自动化

    • CI CD:Gitlab + Gitlab hooks + k8s

    • Testing: 测试环境,单元测试,API自动化测试

    • 在线运行时:k8s + Prometheus ELK Control Panle

  • 可用性 和兼容性设计

    • 隔离

    • 超时控制

    • 负载保护

    • 限流

    • 降级

    • 重试

    • 负载均衡

微服务设计

  • API网关设计

    增加一个api-interface 用于统一协议出口,在服务内进行大量的dataset join 按照业务场景来设计粗力度的API 为后续服务的进化带来优势

    • 轻量交互

    • 差异服务

    • 动态升级

    • 沟通效率的提升

    • 业务流程: 移动端-- API 网关 -- BFF -- 微服务

  • 微服务划分

    • 业务职能

    • 限界上下文

    • 边界划分

  • 微服务安全

    • full trust

    • half trust

    • zero trus

    • Api gateway -- bff - service - biz auth - jwt - request args

    • 对于外网的请求来说,我们通常在 API Gateway 进行统一的认证拦截,一旦认证成功,我们会使用 JWT 方式通过 RPC 元数据传递的方式带到 BFF 层,BFF 校验 Token 完整性后把身份信息注入到应用的 Context 中,BFF 到其他下层的微服务,建议是直接在 RPC Request 中带入用户身份信息(UserID)请求服务。

    • 对于内网服务,一般要区分身份认证和授权

    • GRPC

      • 主动健康检查 health check,可以在服务提供者服务不稳定时,被消费者所感知,临时从负载均衡中摘除,减少错误请求。当服务提供者重新稳定后,health check 成功,重新加入到消费者的负载均衡,恢复请求。health check,同样也被用于外挂方式的容器健康检测,或者流量检测(k8s liveness & readiness)。

      • 多语言

      • 轻量级,高性能

      • 可插拔

      • IDL

      • 设计理念

      • 移动端:基于HTTP2设计,支持双向流,消息头压缩,单TCP的多路复用,服务端推送等特性

      • 服务而非对象,消息而非引用

      • 负载无关:不同的服务需要使用不同的消息类型和编码

      • 流:streaming api

      • 阻塞式和非阻塞式:支持异步和同步处理在客户端和服务端间交互的消息序列。

      • 元数据交换

      • 标准化状态码

      • protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative helloworld/helloworld.proto

      • 特性:

      • healthCheck

      • 服务发现

        • 客户端发现:直连,比服务端服务发现少一次网络跳转,Consumer 需要内置特定的服务发现客户端和发现逻辑。

        • 服务端发现:Consumer 无需关注服务发现具体细节,只需知道服务的 DNS 域名即可,支持异构语言开发,需要基础设施支撑,多了一次网络跳转,可能有性能损失。

        • 发现类型

        • 通过 Family(appid) 和 Addr(IP:Port) 定位实例,除此之外还可以附加更多的元数据:权重、染色标签、集群等。

        • Provider  注册后定期(30s)心跳一次,注册, 心跳,下线都需要进行同步,注册和下线需要进行长轮询推送。

        • Consumer 启动时拉取实例,发起30s长轮询

        • Server 定期(60s) 检测失效(90s)的实例,失效则剔除。短时间里丢失了大量的心跳连接(15分钟内心跳低于期望值*85%),开启自我保护,保留过期服务不删除。

      多集群多租户

      • 多集群

        • 从单一集群考虑,多个节点保证可用性,通常使用N+2的方式来冗余节点

        • 从单一集群故障带来的影响面角度考虑冗余多套集群

        • 利用 paas 平台,给某个 appid 服务建立多套集群(物理上相当于两套资源,逻辑上维护 cluster 的概念),对于不同集群服务启动后,从环境变量里可以获取当下服务的 cluster,在服务发现注册的时候,带入这些元信息。当然,不同集群可以隔离使用不同的缓存资源等。

        • 统一为一套逻辑集群(物理上多套资源池),即 gRPC 客户端默认忽略服务发现中的 cluster 信息,按照全部节点,全部连接。能不能找到一种算法从全集群中选取一批节点(子集),利用划分子集限制连接池大小。

      • 多租户

        • 在微服务架构中允许许多系统共存是利用微服务稳定性和模块化最有效的方式之一,这种方式一般被称为多租户,租户可以是测试,金丝雀发布,影子系统(shadow systems),甚至服务层或者产品线,使用租户能够保证代码的隔离性并且能够基于流量租户做路由决策。

        • 入站请求绑定上下文,in-process使用context传递,跨服务使用metadata传递,在这个架构中每一个基础组件都能够理解租户信息,并且能够给予租户路由隔离流量,同时在平台中允许对运行不同的微服务有更多的控制,比如指标和日志,在微服务架构中典型的基础组件是日志,指标,存储,消息队列,缓存和配置。基于租户信息隔离数据需要分别处理基础组件。



      作者:LegendGo
      链接:https://www.jianshu.com/p/e44b4a7beb33
      来源:简书
      著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。





      既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!


      由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新


      如果你需要这些资料,可以戳这里获取


      官方文档地址:Go kit - A toolkit for microserviceshttps://gokit.io/


      4. Kratos(22.4K)

      项目简介:**哔哩哔哩(B站)**开源的一套Go微服务框架,包含大量微服务相关框架及工具。


      仓库地址:https://github.com/go-kratos/kratoshttps://github.com/go-kratos/kratos


      官方文档地址:简介 | Kratoshttps://go-kratos.dev/docs/


      5. Go-micro(21.3K)

      项目简介:Micro是一个专注于简化分布式系统开发的微服务生态系统。可插拔的插件化设计,提供强大的可插拔的架构来保证基础组件可以被灵活替换。


      仓库地址:GitHub - asim/go-micro: A Go microservices frameworkA Go microservices framework. Contribute to asim/go-micro development by creating an account on GitHub.https://github.com/asim/go-micro


      官方文档地址:go-micro.devhttps://go-micro.dev/


      中文文档:介绍 · go-micro 微服务开发中文手册 · 看云Micro是一个微服务生态系统。目标是简化分布式系统开发。技术正在迅速发展。现在云计算能够给我们几乎是无限的scale能力,但是采用现有工具来使用scale能力仍然是很困难的。Micro试图去解决这个问题,开发人员首先关注。Micro的核心是简单易用,任何人都可以轻松开始编写微服务。随着您扩展到数百种服务,Micro将提供管理微服务环境所需的基本工具https://www.kancloud.cn/linimbus/go-micro/529015


      6. Rpcx(7.9K)

      项目简介:最好的Go语言的RPC服务治理框架,快、易用却功能强大。



      仓库地址:https://github.com/smallnest/rpcxhttps://github.com/smallnest/rpcx


      官方文档地址:


      RPCXhttps://rpcx.io/


      7. CloudWeGo-Kitex(6.6K)

      项目简介:字节跳动,KiteX 自 2020.04 正式发布以来,公司内部服务数量 8k+,QPS 过亿。KiteX 是字节跳动框架组研发的下一代高性能、强可扩展性的 Go RPC 框架。除具备丰富的服务治理特性外,相比其他框架还有以下特点:集成了自研的网络库 Netpoll;支持多消息协议(Thrift、Protobuf)和多交互方式(Ping-Pong、Oneway、 Streaming);提供了更加灵活可扩展的代码生成器。


      仓库地址:https://github.com/cloudwego/kitexhttps://github.com/cloudwego/kitex


      官方文档地址:概览 | CloudWeGohttps://www.cloudwego.io/zh/docs/overview/


      8. Goa(5.4K)

      项目简介:Goa 是一款用 Go 用于构建微服务的框架,采用独特的设计优先的方法


      仓库地址:https://github.com/goadesign/goahttps://github.com/goadesign/goa


      官方文档地址:https://goa.design/https://goa.design/


      9.Dubbo-go(4.6K)

      项目简介:阿里,由Apache 软件基金会官方发布Go 语言加入 Dubbo 生态,架构是基于dubbo的extension模块和分层的代码设计,主要解决 Go 项目与 Java & Dubbo 项目的互通问题,同时也为 Go 项目提供了一种 RPC 与微服务


      仓库地址:https://github.com/apache/dubbo-gohttps://github.com/apache/dubbo-go


      官方文档地址:https://dubbogo.github.io/dubbo-go-website/zh-cn/https://dubbogo.github.io/dubbo-go-website/zh-cn/


      10.Jupiter(4.3K)

      项目简介:斗鱼开源的一套微服务治理框架,提供丰富的后台功能,管理应用的资源、配置,应用的性能、配置等可视化。


      仓库地址:https://github.com/douyu/jupiterhttps://github.com/douyu/jupiter


      官方文档地址:http://jupiter.douyu.com/http://jupiter.douyu.com/


      11.Tars-go(3.3K)





      既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!


      由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新


      如果你需要这些资料,可以戳这里获取


      将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**


      如果你需要这些资料,可以戳这里获取

      ————————————————


                                  版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

                              

      原文链接:https://blog.csdn.net/2401_84920052/article/details/138691951


      作者:互联网工科生
      链接:https://www.zhihu.com/question/24399966/answer/3342607439
      来源:知乎
      著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

      题主后端采用的是Java框架,这里还蛮推荐同采用Java框架的快速开发平台,可通过API访问,与第三方安全性和应用程序生命周期服务集成。一个基于Java Boot/.Net 6构建的简单、跨平台开发框架!通过它,你可以通过自动代码生成和可视化编程,只需要少量代码,即可快速搭建各种应用。提供了极大的灵活性,它的架构设计也让开发者无需担心底层技细节,能够专注于应用逻辑和用户体验的开发。接下来我将概括介绍平台的功能和技术栈展示,使你可以更直观的了解到前端框架对于开发者构建应用程序的益处。1.项目简介JNPF是建立在开放标准和全源码交付基础上的。核心技术采用 Spring Boot、Spring Cloud Alibaba,Mybatis Plus、RocketMQ、MinIO 等主要框架和中间件,采用Nacos注册和配置中心,集成流量卫兵Sentinel,前端基于Vue3框架定制开发,可帮助企业更快,更高效地进行微服务开发,相较于业界使用广泛的开源版本平台,提供更强大的功能和更全面的服务支持。平台即可私有化部署,也支持K8S部署。2.平台特性2.1 构架特性主体框架:核心技术采用Spring Boot、MyBatis-Plus、Alibaba Druid、Hutool、Lombok等;前后端分离:采用主流开发模式-前后端分离框架设计,前端同时适配Vue2/Vue3,代码风格精简,面向后端开发工程师,易于理解和上手;统一接口管理:集成Swagger/Knife4j,可自动生成Api文档;数据库兼容:支持MySQL、SQLServer、Oracle、PostgreSQL等主流数据库,支持达梦、人大金仓等国产信创数据库;国产信创建中间件:兼容东方通(TongWeb)、金蝶Apusic(AAS)等国产信创中间件;国产信创操作系统:支持麒麟服务器操作系统、统信UOS、华为欧拉等国产信创服务器操作系统部署;2.2 功能特性灵活的权限控制:基于RBAC权限管理,该功能模块下的功能用于维护企业的组织架构信息以及员工信息。主要包含了组织架构管理、部门管理、分级管理员、角色管理、岗位管理等功能。用户可在此功能模块下维护公司的组织架构信息(组织/部门/角色/岗位),用户信息,也可以通过第三方应用(钉钉/企业微信)将组织架构信息一键导入到系统中,也可以使用组织架构和员工信息的导入功能将数据导入到系统中;第三方登录:开箱即用的第三方授权登录工具类库,提供统一接口,支持接入任意OAuth网站,快速实现OAuth登录功能;单点登录:支持OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议,提供安全、标准和开放的用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限管理和资源管理等;多租户:借助于MyBatis-Plus实现Saas多租户隔离方案;3.整体架构4.技术栈平台的开放性:使用开放标准及功能构建,通过API访问,可与第三方安全性和应用程序生命周期服务集成。模型API提供从第三方工具的核心应用程序工件的访问。开放数据标准,授权开发人员访问数据需要的数据。平台提供的全源码和应用程序可扩展性确保JNPF以满足企业无限制的自定义需求。平台高拓展性:代码全解析:拖过拖拽即可生成前后端源代码,生成的源码提供给开发人员进行二次开发。在线js脚本编辑:平台提供在线js脚本编辑,来满足用户的特殊表单功能的拓展需求。自定义按钮:平台提供自定义按钮的功能,通过自定义按钮的事件与接口结合满足用户的自定义触发动作。自定义组件:平台预留了前端组件的封装接口,用户可自定义封装组件,满足自己的个性化需求。5.基础功能及搭建基于JNPF,用户通过可视化方式构建数据模型、视图、权限、工作流等,即可在平台提供的环境中运行,少量编译部署,更像一种傻瓜式的应用搭建平台。平台对各类组件、业务逻辑做了较高层级的封装,除非有全源码,不然用户无法随心所欲修改界面风格、交互方式、处理逻辑等,而正好JNPF就是为数不多支持全源码的典型产品。该方案对使用者技术要求不高,但需要具备业务抽象、建模能力。主要价值是降低开发门槛、快速适应变化。我们可以试着开启体验环境。官网地址,建议大家注册一个账号,试着用 JNPF在线编辑器上手进行开发,相信你会进一步感受到该平台的强大之处~5.1 代码生成器零代码开发:配备大量可复用控件,通过操作界面元素,拖拽控件自动生成可视化应用;低代码开发:基于 Mybatis-plus-generator 自定义了一套代码生成器, 通过配置数据库字段的注释,可在线生成 WEB 前端(vue)、移动端(vue)、后端(controller、entity、mapperxml、service)等代码,极大减少开发难度;5.2 工作流程工作流服务为JNPF 自研的一套工作流方案,包含流程表单和流程引擎两大部分,流程表单可视化设计,可配置程度高,采用结构化的表单模版设计,集中解析模式的设计。适应于中国国情的多种场景的需要、配置所见即所得、低代码、高配置;5.3 门户设计全新门户设计,操作简单,自由拖拽,一次编辑多端自适应,充分满足用户的个性化需求。5.4 大屏设计自由布局页面,拖拽控件至页面中,针对不同的控件进行内容设值和数据绑定,所见即所得的实现大屏可视化页面开发;5.5 报表设计无需开发任何代码,用户只需在界面上配置一系列参数即可实现多种类型报表的配置、在线渲染报表内容、报表导出、打印等功能;5.6 第三方登录开箱即用的第三方授权登录工具类库,提供统一接口,支持接入任意 OAuth 网站,快速实现 OAuth 登录功能。5.7 多租户实现多租户技术或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的境下共用相同的系统或程序组件,并且扔可确保各用户间数据的隔离性。在云计算时代,多租户技术在共用的数据中心以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离。6.写在最后像数据模型设计器、流程设计器和页面设计器,是低代码平台的核心,如果你理解软件设计的MVC分层架构,就很容易理解低代码平台的核心产品功能,以及不同的产品思路。当然不同低代码平台还有更多各具特色的强悍功能,有兴趣的读者可以做进一步研究。据我所知,这个框架是支持免费部署的,也就是如果你有应用开发的需求,可以与官方取得联系,申请免费部署到本地进行试用体验,试错成本将会大大降低。



      Golang是一种开源的编程语言,由Google开发。Golang的主要功能特性包括:

      - 高并发:Golang具有高并发的特点,可以轻松处理大量并发请求。

      - 内存管理:Golang具有自动内存管理的特点,可以减少内存泄漏的问题。

      - 高效性:Golang具有高效的特点,文件编译速度快,运行速度也很快。

      - 跨平台:Golang支持跨平台编译,可以在不同的操作系统上运行。

      - 简单易学:Golang的语法简单易学,学习曲线较为平缓。

      - 生态系统丰富:Golang生态系统丰富,有大量的第三方库可供使用。

      - 安全性:Golang具有安全的特点,可以减少一些常见的安全漏洞。


      01 云原生-Kubernetes (K8s) 98.2 k stars





      Kubernetes,也称为k8s或“ Kube ”,是一个开源的容器编排和管理平台(工具),支持容器运行管理和规模化。通过使用 Kubernetes,免去了部署容器化应用等手动流程,让所有Docker 容器主机都可以拥有集群化、负载伸缩、冗余机制。以及用于自动化应用程序的部署、扩展和管理。它提供了一组API和工具,可以管理容器化应用程序的生命周期,包括自动化部署、负载均衡、自动扩展、滚动更新、故障恢复等。






      Kubernetes主要功能特性

      - 自动化部署和扩展:Kubernetes可以自动化部署和扩展应用程序,根据负载自动调整副本数量,从而实现高可用性和可伸缩性。

      - 负载均衡:Kubernetes提供了内置的负载均衡器,可以自动分配网络流量到不同的容器中,从而实现高可用性和可伸缩性。

      - 自动化滚动更新:Kubernetes可以自动化滚动更新应用程序,逐步替换旧版本的容器,从而实现无缝升级。

      - 故障恢复:Kubernetes可以自动化检测和恢复故障,包括容器崩溃、节点故障等。

      - 水平自动扩展:Kubernetes可以根据负载自动扩展容器数量,从而实现高可用性和可伸缩性。

      - 存储编排:Kubernetes可以管理容器的存储需求,包括持久化存储、分布式存储等。

      - 配置管理:Kubernetes可以管理容器的配置,包括环境变量、配置文件等。

      - 安全性:Kubernetes提供了一系列安全措施,包括访问控制、身份验证、加密等。


      开源地址:github.com/kubernetes/k

      02 云原生-traefik 43k stars





      Traefik是一个开源的反向代理和负载均衡器,专门用于云原生环境。它支持自动化服务发现、动态配置、自动化SSL证书管理等功能。





      Traefik主要功能特性

      - 自动化服务发现:Traefik可以自动发现和管理容器化应用程序,支持Docker、Kubernetes、Mesos等容器编排平台。

      - 动态配置:Traefik支持动态配置,可以根据服务发现自动更新配置,从而实现高可用性和可伸缩性。

      - 自动化SSL证书管理:Traefik可以自动化申请和更新SSL证书,支持Let's Encrypt、ACME等证书颁发机构。

      - 反向代理和负载均衡:Traefik可以作为反向代理和负载均衡器,支持多种负载均衡算法、健康检查等功能。

      - 中间件支持:Traefik支持可插拔中间件,可以轻松地添加和移除中间件,从而实现更加灵活的功能。

      - 安全性:Traefik支持TLS、HTTP/2、OCSP Stapling等安全协议和技术。


      开源地址:github.com/traefik/trae

      03 云原生-istio 32.9k stars





      Istio是一个开源的服务网格平台,它提供了流量管理、安全性、可观察性等功能特性。Istio 由两个组件组成,data plane和control plane。data plane使用Sidecar将与Envoy代理容器应用程序一起部署。然后Envoy 代理会拦截应用程序的所有流量来让服务之间进行通信。control plane管理配置,从data plane接收指标,并通过 Envoy 代理提供的 API 动态更改配置。让data plane可以在不重新启动服务器的情况下改变进程。




      Istio主要功能特性

      - 流量管理:Istio可以实现流量控制、负载均衡、故障恢复等功能,可以对服务流量进行细粒度的控制和管理。

      - 安全性:Istio可以提供服务间的安全保障,包括身份认证、授权、加密等功能,可以保证服务的安全性。

      - 可观察性:Istio可以提供服务的可观察性,包括流量跟踪、指标监控、日志记录等功能,可以帮助开发人员更好地了解服务的运行状态和性能指标。

      - 熔断降级:Istio可以实现熔断降级功能,当服务出现故障或异常时,可以自动降低服务的流量,避免影响整个系统的稳定性。

      - 多语言支持:Istio支持多种编程语言,包括Java、Go、Python等,可以实现跨语言的服务治理。

      - 可扩展性:Istio可以进行扩展,可以添加自定义的插件和中间件,满足不同场景下的需求。


      开源地址:github.com/istio/istio

      04 云原生-envoy 22k stars





      Envoy是一个开源的云原生代理,它可以在服务网格中实现负载均衡、流量管理、安全性等功能特性。





      Envoy主要功能特性

      - 负载均衡:Envoy可以实现多种负载均衡算法,包括轮询、加权轮询、最少连接数等。

      - 流量管理:Envoy可以实现流量控制、故障恢复、熔断降级等功能,可以对服务流量进行细粒度的控制和管理。

      - 安全性:Envoy可以提供服务间的安全保障,包括身份认证、授权、加密等功能,可以保证服务的安全性。

      - 可观察性:Envoy可以提供服务的可观察性,包括流量跟踪、指标监控、日志记录等功能,可以帮助开发人员更好地了解服务的运行状态和性能指标。

      - 多协议支持:Envoy支持多种通信协议


      开源地址:github.com/envoyproxy/e

      官网地址:envoyproxy.io/

      05 云原生-rook 11k stars





      Rook是Kubernetes的开源云原生存储协调器(云原生存储编排器),为Ceph存储提供平台、框架和支持,以与Kubernete进行原生集成,可以将存储系统转换为Kubernetes原生应用程序。


      Ceph是一个分布式存储系统,提供文件、块和对象存储,并部署在大规模生产集群中。


      Rook自动化了Ceph的部署和管理,以提供自我管理、自我扩展和自我修复的存储服务。Rook运营商通过构建Kubernetes资源来部署、配置、提供、扩展、升级和监控Ceph。


      Ceph存储提供程序的状态为“稳定”。未来的许多版本都将计划进行功能和改进。提供了版本之间的升级,以确保版本之间的向后兼容性。


      Rook由云原生计算基金会(CNCF)主办,是一个毕业级别的项目。如果你是一家希望帮助塑造容器封装、动态调度和面向微服务的技术发展的公司,可以考虑加入CNCF。有关谁参与以及Rook如何发挥作用的详细信息,请阅读CNCF的公告。


      Rook主要功能特性

      - 支持多种存储:Rook支持多种存储系统,包括Ceph、NFS等。

      - 支持动态扩展:Rook支持动态扩展存储系统,可以根据需求自动扩容和缩容存储容量。

      - 支持自动化操作:Rook支持自动化操作,可以自动化部署、管理和监控存储系统。

      - 支持数据保护:Rook支持数据保护,可以实现数据备份、恢复和灾备等功能。

      - 支持多租户:Rook支持多租户,可以实现不同用户之间的隔离和资源分配。

      - 支持可观察性:Rook支持可观察性,可以实现存储系统的监控、日志和指标收集。

      开源地址:github.com/rook/rook

      06 云原生-KubeVela 5.2k stars


      kubevela是一个云原生应用编排引擎,它提供了一个声明式的应用编排模型,可以使开发人员更加方便地构建、部署和管理云原生应用。

      开发者在将应用程序部署到 K8s 时,通常需要了解 pod、服务、入口、资源请求、CRD 等概念,而要全部了解它们绝非易事。 KubeVela 能够让这些工作的工作量最小化,开发人员只需要管理一个名为Appfile 的配置文件,无需了解太多复杂的 K8s 配置即可部署。


      kubevela主要功能特性

      - 声明式应用编排:kubevela提供了一个声明式的应用编排模型,可以将应用的配置和部署描述放在一个YAML文件中,从而简化了应用的编排和管理。

      - 应用组件化:kubevela将应用拆分为多个组件,每个组件都可以独立地进行配置和部署,从而实现了应用的组件化。

      - 可扩展性:kubevela支持插件化的架构,可以通过插件来扩展应用编排引擎的功能。

      - 多云支持:kubevela支持多云环境,可以在不同的云平台上部署应用。

      - 可观察性:kubevela提供了应用的监控和日志收集功能,可以帮助开发人员更好地了解应用的运行情况。


      开源地址:github.com/kubevela/kub

      07 云原生-Aeraki 664 stars


      Aeraki是一个开源的服务网格扩展平台,它提供了对多云环境下的服务网格的支持。Aeraki 在希腊语中的意思和汉语中的 ”微风“差不多 。该项目提供了一种非侵入的、高度可扩展的解决方案来管理服务网格中的非HTTP的7层流量。它一般用来与Istio集成,当然未来可能也会给其他服务网格带来“微风”。

      Aeraki Mesh 可以帮助你在服务网格中管理任何七层协议。目前已经支持了 Dubbo、Thrit、Redis、Kafka、ZooKeeper 等开源协议。你还可以使用 Aeraki Mesh 提供的 MetaProtocol 协议扩展框架来管理私有协议的七层流量。


      Aeraki主要功能特性

      - 多云支持:Aeraki支持多云环境,可以在不同的云平台上部署服务网格。

      - 网格扩展:Aeraki可以扩展服务网格的功能,包括流量管理、安全性、可观察性等。

      - 支持多种协议:Aeraki支持多种协议,包括HTTP、TCP、gRPC等,可以满足不同的应用需求。

      - 自动化管理:Aeraki可以自动化管理服务网格,包括配置管理、监控、自动化部署等。

      - 可观察性:Aeraki提供了服务网格的监控和日志收集功能,可以帮助开发人员更好地了解服务网格的运行情况。

      - 流量管理:请求负载均衡,熔断,任意匹配条件的动态路由,全局和本地限流,流量镜像等强大的流量管理能力。

      - 可见性:提供丰富的七层可见性数据,包括请求级别的度量指标,访问日志和端到端的分布式调用跟踪能力。

      - 易于扩展:只需要少量(数百行)代码即可接入一个私有协议,和 Istio 无缝集成,是 Istio 推荐集成项目。


      官网:aeraki.net/

      中文网:aeraki.net/zh/

      开源地址:github.com/aeraki-mesh/

      08 Web服务器-Caddy 47.1k stars


      Caddy是一个多用途的 Go 语言平台,开源的HTTP/2服务器,具有自动化SSL证书管理、自动HTTP/2升级、可插拔中间件等功能。主要用作 HTTPS 服务器,但也适用于其他长时间运行的 Go 程序。它提供了自动化文档、通过 API 进行优雅的在线配置更改以及与其他 Caddy 应用程序的统一。


      相比其他 Web 服务器,Caddy 提供了前所未有的控制水平,并在内存中设置初始化类型的实际值,从 HTTP 处理程序和 TLS 握手到存储介质等方面都提供了支持。此外,Caddy 还拥有一个强大的插件系统和一个包含几乎所有配置的配置文件,使得管理服务器配置更加直接并减少了隐藏的变量和因素。


      Caddy主要功能特性

      - 自动化SSL证书管理:Caddy可以自动化申请和更新SSL证书,支持Let's Encrypt、ACME等证书颁发机构。

      - 自动HTTP/2升级:Caddy可以自动升级HTTP/1.1到HTTP/2,从而提高网站性能。

      - 可插拔中间件:Caddy支持可插拔中间件,可以轻松地添加和移除中间件,从而实现更加灵活的功能。

      - 静态文件服务器:Caddy可以作为静态文件服务器,支持gzip压缩、缓存控制等功能。

      - 反向代理:Caddy可以作为反向代理服务器,支持负载均衡、健康检查等功能。

      - 日志记录:Caddy可以记录访问日志、错误日志等。

      - 安全性:Caddy支持TLS 1.3、HTTP/2、OCSP Stapling等安全协议和技术。

      - 相比 Nginx,使用 Caddyfile 配置更加简单,同样也支持 JSON 配置。

      - 默认支持 HTTP/2 协议,无需单独配置。

      - 自动获取和更新 TSL/OCSP 证书,无需担心过期宕机问题。

      - 高度可扩展的模块化架构让Caddy 做任何事情都不会臃肿。

      - 可以在任何平台运行,无需外部依赖。

      - 基于 Go 开发,保证内存安全。

      - 可轻松扩展到集群环境。


      开源地址:github.com/caddyserver/

      项目合集:github.com/OpenTechCol/

      09 微服务-etcd 43.4k stars



      etcd是一个高可用的分布式键值存储系统,由CoreOS开发。用于共享配置和服务发现的分布式,一致性的KV存储系统。


      etcd主要功能特性

      - 分布式存储:ETCD采用Raft算法实现分布式存储,可以保证数据的一致性和可靠性。

      - 键值存储:ETCD提供键值存储的功能,可以存储和检索各种类型的数据。

      - 监视功能:ETCD提供监视功能,可以监视键值的变化,并及时通知客户端。

      - 安全性:ETCD支持TLS加密,可以保证数据的安全性。

      - REST API:ETCD提供REST API,可以方便地与其他应用程序进行交互。

      - 高可用性:ETCD支持多副本同步,可以实现高可用性。


      开源地址:github.com/etcd-io/etcd


      10 微服务-go-zero 24.1k stars

      go-zero是一个基于Golang的微服务框架,它提供了RPC、API网关、缓存、限流、熔断等功能特性。与其类似的go-micro国内已经停更,go-zero目前应该是国内社区最活跃最稳定用的也最多的go微服务框架了


      go-zero主要功能特性

      - 快速开发:go-zero提供了代码生成工具,可以快速生成服务代码和API文档,降低开发成本。

      - RPC框架:go-zero提供了高性能的RPC框架,支持多种通信协议和序列化方式。

      - API网关:go-zero提供了API网关,可以实现请求路由、请求转发、身份认证等功能。

      - 缓存:go-zero提供了缓存功能,支持多种缓存类型和缓存策略。

      - 限流:go-zero提供了限流功能,可以避免系统过载和雪崩效应。

      - 熔断:go-zero提供了熔断功能,可以避免服务故障和异常对系统的影响。

      - 分布式事务:go-zero提供了分布式事务支持,可以实现跨服务的事务处理。

      - 可扩展性:go-zero具有良好的可扩展性,可以添加自定义的插件和中间件,满足不同场景下的需求。


      开源地址:github.com/zeromicro/go

      11 数据库-TiDB 34k stars





      TiDB 是一个开源(apache2.0)云原生分布式 NewSQL 数据库,它支持水平扩展、高可用性、强一致性等特性。NewSQL 是一个新的数据库,它充分发挥了 RDBMS 和 NoSQL 的优点。除了 NoSQL 灵活的可扩展性和分布式架构之外,它同时支持 RDBMS 特有的ACID 事务。

      TiDB主要功能特性

      - 分布式架构:TiDB采用分布式架构,可以水平扩展,支持无缝扩容和缩容。

      - ACID事务:TiDB支持ACID事务,保证数据的一致性、可靠性和安全性。

      - SQL兼容性:TiDB兼容MySQL协议和语法,可以无缝迁移MySQL应用程序。

      - 强一致性:TiDB采用Raft协议实现强一致性,保证数据的一致性和可靠性。

      - 分布式事务:TiDB支持分布式事务,可以跨多个节点执行事务。

      - 自动化运维:TiDB提供了自动化运维工具TiUP,可以自动化部署、升级和管理TiDB集群。

      - 多数据中心:TiDB支持多数据中心部署,可以实现跨地域的数据复制和灾备。

      - 实时监控:TiDB提供了实时监控和性能分析工具TiDB Dashboard,可以实时监控TiDB集群的运行状态和性能指标。

      - 同时支持OLTP(在线事务处理)和OLAP(在线分析处理):可以将目前使用的DWH产品与TiDB合二为一来实现HTAP(混合事务处理)。

      - 横向扩展架构,不受数据库规模的限制:数据库可根据服务规模扩展/收缩,而不会中断服务。

      - 多平台支持:可在本地部署,也可部署在云环境(AWS、GCP、Azure)中。

      - 提供 TiDB Cloud,完全托管的服务:TiDB Cloud 由 PingCAP 管理,因此不必再担心服务器配置、扩展、故障转移等。


      开源地址:github.com/pingcap/tidb


      12 数据库-MySQL 13.3k stars


      go-sql-driver是一个基于Golang的SQL驱动,它提供了对MySQL、PostgreSQL等数据库的支持。Go database/sql包的 MySQL 驱动程序。

      go-sql-driver主要功能特性

      - 支持多种数据库:go-sql-driver支持多种数据库,包括MySQL、PostgreSQL等。

      - 高性能:go-sql-driver具有高性能的特点,可以快速地处理大量的数据库请求。

      - 支持连接池:go-sql-driver支持连接池,可以复用连接,减少连接建立和断开的开销。

      - 支持事务:go-sql-driver支持事务,可以将多个SQL语句打包成一个事务,保证事务的原子性。

      - 支持预编译:go-sql-driver支持预编译,可以提高查询的效率。

      - 支持多语句查询:go-sql-driver支持多语句查询,可以在一个连接中执行多个SQL语句。

      - 支持SQL注入防护:go-sql-driver支持SQL注入防护,可以避免SQL注入攻击。

      - 轻巧便捷。

      - 纯Go实现。

      - 能够自动处理断开的连接。

      - 支持大于 16MB 的查询。


      开源地址:github.com/go-sql-drive

      13 数据库-MongoDB Go Driver 7.4k stars


      mongo-go-driver是一个基于Golang开源的MongoDB驱动,它提供了对MongoDB数据库的支持。

      与其类似的还有mgo,也是MongoDB的Go语言驱动,它用基于Go语法的简单API实现了丰富的特性,并经过良好测试。使用起来很顺手,文档足够,但目前已不维护。





      mongo-go-driver主要功能特性

      - 支持MongoDB 3.0及以上版本:mongo-go-driver支持MongoDB 3.0及以上版本。

      - 高性能:mongo-go-driver具有高性能的特点,可以快速地处理大量的数据库请求。

      - 支持连接池:mongo-go-driver支持连接池,可以复用连接,减少连接建立和断开的开销。

      - 支持事务:mongo-go-driver支持事务,可以将多个MongoDB操作打包成一个事务,保证事务的原子性。

      - 支持聚合操作:mongo-go-driver支持聚合操作,可以实现数据的分组、排序、计数等操作。

      - 支持地理位置查询:mongo-go-driver支持地理位置查询,可以实现地理位置相关的查询和操作。

      - 支持MongoDB Atlas:mongo-go-driver支持MongoDB Atlas,可以实现云上MongoDB的连接和操作。


      开源地址:github.com/mongodb/mong

      14 数据库-mgo 2.7k stars



      mgo是一个基于Golang的MongoDB驱动,它提供了对MongoDB数据库的支持。mgo现在已经不维护。不推荐在生产环境上使用,可用于学习,推荐使用mongo-go-driver。

      mgo主要功能特性

      - 支持MongoDB 3.0及以上版本:mgo支持MongoDB 3.0及以上版本。

      - 高性能:mgo具有高性能的特点,可以快速地处理大量的数据库请求。

      - 支持连接池:mgo支持连接池,可以复用连接,减少连接建立和断开的开销。

      - 支持事务:mgo支持事务,可以将多个MongoDB操作打包成一个事务,保证事务的原子性。

      - 支持聚合操作:mgo支持聚合操作,可以实现数据的分组、排序、计数等操作。

      - 支持地理位置查询:mgo支持地理位置查询,可以实现地理位置相关的查询和操作。

      - 支持MongoDB Atlas:mgo支持MongoDB Atlas,可以实现云上MongoDB的连接和操作。


      开源地址:github.com/go-mgo/mgo/t

      15 数据库-qmgo 1.1k stars


      qmgo是一个基于Golang的MongoDB驱动(基于mongo官方driver),它提供了对MongoDB数据库的支持。支持大量mgo不支持的新特性,而使用方式更像mgo,mgo用户迁移也方便

      qmgo主要功能特性

      - 支持MongoDB 4.0及以上版本:qmgo支持MongoDB 4.0及以上版本。

      - 高性能:qmgo具有高性能的特点,可以快速地处理大量的数据库请求。

      - 支持连接池:qmgo支持连接池,可以复用连接,减少连接建立和断开的开销。

      - 支持事务:qmgo支持事务,可以将多个MongoDB操作打包成一个事务,保证事务的原子性。

      - 支持聚合操作:qmgo支持聚合操作,可以实现数据的分组、排序、计数等操作。

      - 支持地理位置查询:qmgo支持地理位置查询,可以实现地理位置相关的查询和操作。

      - 支持MongoDB Atlas:qmgo支持MongoDB Atlas,可以实现云上MongoDB的连接和操作。


      开源地址:github.com/qiniu/qmgo

      16 缓存-go-redis 17.2k stars

      go-redis是一个基于Golang的Redis客户端,它提供了连接池、事务、管道、Pub/Sub等功能特性。


      go-redis主要功能特性

      - 连接池:go-redis提供了连接池功能,可以复用连接,减少连接建立和断开的开销。

      - 事务:go-redis支持Redis事务,可以将多个命令打包成一个事务,保证事务的原子性。

      - 管道:go-redis支持Redis管道,可以将多个命令打包成一个管道,减少网络延迟和TCP连接数。

      - Pub/Sub:go-redis支持Redis Pub/Sub,可以实现消息的发布和订阅功能。

      - Lua脚本:go-redis支持执行Lua脚本,可以实现复杂的操作和事务。

      - 分布式锁:go-redis提供了分布式锁功能,可以实现对共享资源的互斥访问。

      - Redis Sentinel:go-redis支持Redis Sentinel,可以实现Redis的高可用和故障转移。


      开源地址:github.com/redis/go-red


      17 区块链-go-ethereum/Geth 42.2k stars

      Geth是以太坊区块链的官方客户端,用于管理和操作以太坊网络。它支持挖矿、智能合约、交易处理、账户管理等功能。Geth是 Go Ethereum 的缩写,它是使用以太坊的最常用的客户端软件。可以安装 Geth 作为全节点加入以太坊网络。





      Geth主要功能特性

      - 区块链同步:Geth可以同步以太坊网络中的区块链数据,包括交易记录、账户余额等。

      - 智能合约:Geth支持智能合约,可以编写和部署智能合约,从而实现去中心化应用程序。

      - 交易处理:Geth可以处理以太坊网络中的交易,包括转账、合约调用等。


      开源地址:github.com/ethereum/go-

      下载地址:geth.ethereum.org/downl


      18 区块链-ChainLink 4.6k stars



      ChainLink是一个开源的区块链项目,它提供了一个用于连接区块链和现实世界数据的桥梁。ChainLink的存在主要是为了给多个数据输入和输出建立一个存取点,这些输入和输出的数据比如:支付服务、银行和区块链系统等。它能够发挥数据传输的角色,传输区块链中不存在的链外数据。





      ChainLink主要功能特性

      - 数据源连接:ChainLink可以连接各种数据源,包括API、数据库、传感器等,将现实世界的数据引入区块链中。

      - 数据验证:ChainLink可以对数据进行验证,确保数据的真实性和准确性。

      - 数据转换:ChainLink可以将不同格式的数据进行转换,以满足区块链的要求。

      - 数据交付:ChainLink可以将数据交付给区块链,使得区块链可以使用这些数据。

      - 智能合约集成:ChainLink可以与智能合约进行集成,使得智能合约可以使用外部数据源。

      - 高可用性:ChainLink可以实现高可用性,确保数据的可靠性和稳定性。


      开源地址:github.com/smartcontrac


      19 配置管理-mgmt 3.1k stars




      mgmt是一个配置管理工具,它提供了一种声明式的配置管理模型,可以帮助管理员更加方便地管理IT基础设施。

      mgmt主要功能特性

      - 声明式配置管理:mgmt提供了一种声明式的配置管理模型,可以将IT基础设施的配置和管理描述放在一个YAML文件中,从而简化了配置管理的过程。

      - 自动化管理:mgmt可以自动化管理IT基础设施,包括配置管理、监控、自动化部署等。

      - 多云支持:mgmt支持多云环境,可以在不同的云平台上管理IT基础设施。

      - 可扩展性:mgmt支持插件化的架构,可以通过插件来扩展配置管理工具的功能。

      - 可观察性:mgmt提供了IT基础设施的监控和日志收集功能,可以帮助管理员更好地了解IT基础设施的运行情况。


      开源地址:github.com/purpleidea/m

      学习路线图

      资料教程

      以上是系统学习课程大纲,需要系统学习或者需要视频资料点下方腾讯链接