微服务
把每一个功能抽取成一个一个的服务 微服务之间访问是轻量级的,RPC
如何通信
网络传输,用RPC(远程过程调用)
HTTP传输,GET POST PUT DELETE 基于TCP,更靠底层,RPC基于TCP,Dubbo(18年底改成支持各种语言),Grpc,Thrift 调用谁,用服务注册和发现(分布式数据同步:etcd,consul,zk)
微服务层
RPC
简介
远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程
简单的RPC案例
服务端(创建一个计算器服务)
package main
import (
"fmt"
"log"
"net/http"
"net/rpc"
)
func main ( ) {
rpc. Register ( new ( Cal) )
rpc. HandleHTTP ( )
if err := http. ListenAndServe ( ":8000" , nil ) ; err != nil {
log. Panicln ( err)
}
}
type Params struct {
A int
B int
}
type Cal struct { }
func ( o Cal) Add ( p * Params, r * int ) error {
fmt. Println ( "ok" )
* r = p. A + p. B
return nil
}
客户端(通过rpc函数调用服务)
package main
import (
"fmt"
"log"
"net/rpc"
)
func main ( ) {
conn, err := rpc. DialHTTP ( "tcp" , ":8000" )
if err != nil {
log. Panicln ( err)
}
var result int
if err := conn. Call ( "Cal.Add" , Params{ A: 1 , B: 3 } , & result) ; err != nil {
log. Panicln ( err)
}
defer conn. Close ( )
fmt. Println ( "result = " , result)
}
type Params struct {
A int
B int
}
总结
客户端根据rpc协议进行网络通信 客户端是可以跨语言通信的 既然跨语言,那么服务之间需要一个服务发现,客户端从服务发现服务中获取服务 综上所诉,对于一个平台不通功能都将注册进注册中心,客户端从注册中心发现服务 前端怎么调用?