当前位置: 首页 > news >正文

Twirp:一个很酷的基于Go的新RPC框架

今天,Twitch发布了一个RPC框架,用于在Go编写的后端服务之间进行通信。框架的名字叫做Twirp,现在在Apache 2开源许可协议下可用。

Twirp在Twitch取得了巨大的成功-它的使用范围在成倍增长,大约是每三个月增加3倍,因为越来越多的内部团队采用它,这是因为它比2个最接近的竞争对手“REST”或gRPC更有优势。

与面向URL的REST API相比,结构化的RPC更容易设计和维护,因为它们让你专注于业务逻辑而不是路由方案。更改API以添加新的字段或方法要容易的多,并且可以隐藏序列化的特性(例如,JSON缺少64位的数字)。gRPC实现了结构化的RPC,但我们发现它的复杂性以及带来了不可接受的bug数量-而且我们无法验证其对http2的强要求。Twirp是一个结构化的RPC框架,但强调简单性。Twirp工作在http1.1之上,在一个扩展的特性集上选择稳定性和模块性,然后避开它。

Twirp非常简单,实际上,你可以使用curl命令进行有效的请求,而不需要考虑太多。它有Content-Type头,请求数据负载,一个正确的URL-所有的这些都非常标准化。例如:

# This is a valid Twirp request:
curl \
 -header 'Content-Type:application/json' \
 -data '{"user": "spencer", "email": "spencer@twitch.tv"}' \
 http://localhost:9090/twirp/twitch.example.EmailBoss/UpdateEmail
复制代码

我们认为,如果你工作在一个面向服务的体系结构和程序中使用Go,你会想要使用Twirp。我们也认为,即使你是用的不是go语言,你也能将其应用到系统的服务中。Twirp的核心设计就是语言无关的,我们计划扩展到其它语言上,但是在go语言上的实现已经非常稳定,并且能够应用于生产环境。

开始学习现在可以访问:github.com/twitchtv/twirp.

但是让我们回过头来。RPC框架是什么意思,你为什么需要使用RPC?请的技术细节。这篇文章将涵盖一下内容:

  • 为什么你需要RPC
  • 使用Twirp构建API的一个例子
  • Twirp协议的底层细节
  • 为什么不是gPRC?
  • Twirp在生成环境中的应用
  • 你如何参与进来

我们将从描述工程师编写后端服务API的典型方式开始:手写,带有一组提供JSON响应的URL。

为什么你需要RPC

未完。。 原文地址:https://blog.twitch.tv/twirp-a-sweet-new-rpc-framework-for-go-5f2febbf35f

转载于:https://juejin.im/post/5a60aba56fb9a01cbd58a82b

相关文章:

  • Nginx+Tomcat搭建高性能负载均衡集群
  • 我的第一篇博客
  • 我讲个事情哈,编程其实是文科
  • 基于Docker和Debian打造个人专属操作系统
  • thinkphp在前端页面的js代码中可以使用 U方法吗? 可以使用模板变量如__URL__等吗?...
  • 编写符合Python风格的对象
  • 二叉树基础之序列化和反序列化二叉树
  • 数组作业
  • Linux进程管理
  • Spring系列之-Aware系列接口
  • 如何正确配置 Ubuntu 14.04 服务器?
  • JDK 6和JDK 7中的substring()方法
  • 使用事件和消息队列实现分布式事务(转+补充)
  • JFinal极速开发框架使用笔记(三) 分析Model和ActiveRecord
  • 3138 栈练习2
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • C++类中的特殊成员函数
  • Hibernate【inverse和cascade属性】知识要点
  • Js基础知识(四) - js运行原理与机制
  • Netty 4.1 源代码学习:线程模型
  • python 学习笔记 - Queue Pipes,进程间通讯
  • vue学习系列(二)vue-cli
  • 简单易用的leetcode开发测试工具(npm)
  • 学习ES6 变量的解构赋值
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ionic异常记录
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​人工智能书单(数学基础篇)
  • # .NET Framework中使用命名管道进行进程间通信
  • #includecmath
  • #QT(一种朴素的计算器实现方法)
  • (C#)获取字符编码的类
  • (Forward) Music Player: From UI Proposal to Code
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (一)kafka实战——kafka源码编译启动
  • (转)shell调试方法
  • *** 2003
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .NET 4.0中的泛型协变和反变
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @RequestMapping用法详解
  • @Responsebody与@RequestBody
  • @vue/cli 3.x+引入jQuery
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)