大项目展望|青训营笔记

97 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天

昨天我写了本次大项目的技术选型,那这篇文章我就来写写这次因为时间原因没有来得及使用的技术,以及感想

微服务架构

我们组的项目使用的是非常原始的单体架构,使用了MVC架构,不过很多组使用的是微服务架构,其中这一组的文章思路很清晰,值得我去学习

他们的架构总共经过了三次迭代:

  • 第一次:MVC单体架构,分业务模块

    • 缺点:无法扩展,可靠性低,敏捷性开发和部署实现困难
  • 第二次:进行简单的服务拆分

    • 每一个服务采用不同的端口,不一样的进程
    • 对外部提供的服务通过http的方式暴露出去
    • 内部服务间的调用不再是通过文件路由引用,而是通过GRPC协议暴露出去
    • 缺点:对外暴露的接口不一致,无法通过官方提供的测试APP的测试
  • 第三次:加入API Rooter来将对外暴露的http接口在这一层进行统一

    • 由API Rooter层通过GRPC去调用服务实际的业务逻辑
    • API Rooter层组装api,对外提供http服务 / 直接内部组装好的接口暴露出去
    • API Rooter层管理Token的认证
    • 可能遇到的问题:API Rooter层是SPOF(单点故障)
  • 未来畅想:引入一层网关技术(API Gateway)来处理转发用户的请求

    • 为每个服务组件一个网关小组,单独处理他们提供的API

为什么go使用grpc作为微服务间通信方案

  • gRPC 先要定义服务接口,然后再去实现细节

    • gRPC 可以约束多语言开发的分布式应用程序,使分布式应用程序更加可靠,可扩展。
  • gRPC 使用 protocol buffers 定义服务接口,可以支持多种语言

    • 强制约束了不同语言的分布式应用程序之间进程间通信使用的类型,可以使分布式应用程序更加稳定。
  • 缺点:因为 gRPC 具有接口契约和强类型等特点,会限制面向外部服务的灵活性,所以 gRPC 可能不适合面向外部的服务

使用redis缓存加速

我看到有的组采用了redis缓存加速的方案

  • redis是NoSQL数据库
  • redis具有极高的数据读写速度:数据读取的速度最高可达到110000次/s,数据写入速度最高可达到81000次/s
  • redis支持数据的持久化:可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
  • redis基于内存运行并支持持久化,采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环

一些感想什么的

其实这次就是时间非常紧凑(要准备开学考试),所以基本上感觉除了OSS和联表查询没有用到什么新的东西(不过我也好久没写go了hhh),我的感觉就是组队之前要充分了解队员的技术栈。

参考资料

juejin.cn/post/720324…