↑↓ 选择 · ↵ 打开 · 共索引 377 篇

    LINE Music Team 使用了那些第三方库?

    LINE Music Team 使用到的那些第三方库

    ARCHIVE 这篇写于 2020 年,距今 6 年多了。里面的版本、链接和做法可能都已经过时,看的时候留个心眼。

    LINE 是什么?

    LINE 是由 Naver 集团旗下 LINE 株式会社所开发的即时通信平台,于 2011 年 6 月发布。用户通过互联网免费与其他用户发送信息、观看直播,还可以通过 LINE 进行购物、移动支付及获取新闻信息等功能。

    你可以将它比作国内的微信(WeChat)。

    LINE Music Team 又是什么?

    LINE 上的音乐服务,【LINE MUSIC】可以独家去原唱跟唱:歌神由你来当!

    LINE Music 服务架构

    微服务系统框架:

    服务架构:

    LINE Music Team 使用了那些第三方库

    介绍团队使用的每個工具是如何选择和应用于当前的微服务,在这张架构图中清楚的展示了使用 golang 的微服务中,每個服务是通过哪些流程达到互相沟通的。

    外部部分

    分 Web、APP、External Resource(第三方資源):

    • Web: 由于界面上比 App 复杂,因此在大部分的情況下会选用 GraphQL 增加弹性提供界面让前端开发者可以有较多的选项去获取数据。
    • App:因为界面大小受限,因此大部分情況下是提供 RESTful API 让 App 开发者去对接。
    • External Resource: 当合作厂商更新了资源(比如: 音乐、歌手)时,为了确保资源的及时性,选择通过 WebSocket 让客户端和 Server 通信。

    内部部分

    • 使用 Gin 框架来作为 API Gateway 对接前端的需求。

      • 在 Routing 可以很快速的划分 Group 和 Controller 共用
      • 定制 Middleware 很方便
    • 使用 gRPC 作为内部服务,降低 Response time(grpc-go)

    • 因为是为微服务,因此连通 API 是很有必要的,分享者推荐使用:resty,可以定制化 Before & After 的 Middleware

    • DataBase 使用 GORM 来连接 MySQL 加速开发效率,在使用 Preload、hook、Auto Migration 方面都很方便

    • Redis 部分会处理 cookie、Session、Cache 的部分,推荐使用 go-redis

    • Kafka 大多处理 Event log ,因为 Log 的使用场景是不需要非常即时的,所以使用 Queue 当做 Middleware 降低数据库的负担,推荐使用 Shopify/sarama,使用场景的流程图如下:

    • 连接 elasticsearch go-elasticsearch

    • 前面提到使用 WebSocket 来对接前端,而 Server 端则是使用 melody 来启服务

    • LINE Music Team 的微服务目录,参考的是 golang-standards/project-layout 结构来建立所有的目录,借用集众人贡献的 project ,也可以看出 LINE 是很重视参与开源

    • 每段程序中会有生命周期,当开发者在使用特定程序做依赖注入(Dependency Injection),让代码可以处理事件前后所需要做的相关功能(比如:显示错误日志时可以发送到 Sentry)

    以下两个组件可以参考:

    上面介绍了很多在开发上使用的工具组件,最后一定要写测试来确保自己的程序是具有可靠性的,推荐 testify 和 goconvey 来做测试相关的操作

    参考资料

    1. LINE 開發社群計畫: Golang #54 場社群小聚心得 - YouTube 视频回看
    2. LINE 開發社群計畫: Golang #54 場社群小聚心得 - 文字整理稿

    茶歇驿站

    一个可以让你停下来看一看,在茶歇之余给你帮助的小站,这里的内容主要是后端技术,个人管理,团队管理,以及其他个人杂想。