基于Thrift.Rpc的异构系统微服务初窥

微服务整体设计

单服务基本设计

Thrift技术讲解

thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

1.数据结构

  • 基本类型(括号内为对应的Java类型):
    bool(boolean): 布尔类型(TRUE or FALSE)
    byte(byte): 8位带符号整数
    i16(short): 16位带符号整数
    i32(int): 32位带符号整数
    i64(long): 64位带符号整数
    double(double): 64位浮点数
    string(String): 采用UTF-8编码的字符串
  • 特殊类型(括号内为对应的Java类型)
    binary(ByteBuffer):未经过编码的字节流
  • Structs(结构):
    struct UserProfile {
    1: i32 uid,
    2: string name,
    3: string blurb
    }

    struct UserProfile {
    1: i32 uid = 1,
    2: string name = “User1”,
    3: string blurb
    }

  • 容器,除了上面提到的基本数据类型,Thrift还支持以下容器类型:
    list(java.util.ArrayList) set(java.util.HashSet) map(java.util.HashMap)
    struct Node {
    1: i32 id,
    2: string name,
    3: list subNodeList,
    4: map<i32,string> subNodeMap,
    5: set subNodeSet
    }
    struct SubNode {
    1: i32 uid,
    2: string name,
    3: i32 pid
    }
    struct Node {
    1: i32 uid,
    2: string name,
    3: list subNodes
    }
  • 服务
    service UserStorage {
    void store(1: UserProfile user),
    UserProfile retrieve(1: i32 uid)
    }

编译代码

  • Go 使用 thrift -r –gen go:thrift_import=thrift App.thrift
  • Php 使用 thrift -r –gen php:server,psr4 App.thrift

配合Nginx Tcp负载均衡搭建服务

1
2
3
4
5
6
7
8
9
10
11
upstream tcp_upstream_default {
server 127.0.0.1:12001;
server 127.0.0.1:12002;
}

server {
listen 12000;
proxy_connect_timeout 5s;
proxy_timeout 30s;
proxy_pass tcp_upstream_default;
}