# 常問問題
常見問題解答應該為最常見的問題提供快速解答。
## 什么是Micro?
Micro是一個專注于簡化分布式系統開發的微服務生態系統。
- Micro是一個[框架](https://github.com/micro/go-micro)
- Micro是一個[工具包](https://github.com/micro/micro)
- Micro是一個[社區](http://slack.micro.mu/)
- Micro是一個[生態系統](https://micro.mu/explore/)
### 開源
Micro由開放源碼庫和工具組成,以幫助微服務開發。
- **go-micro** - 用于編寫微服務的可插入Go RPC框架; 服務發現,客戶端/服務器rpc,pub/sub等。
- **go-plugins** - go-micro的插件,包括etcd,kubernetes,nats,rabbitmq,grpc等
- **micro** - 一個包含傳統入口點的微服務工具包; API網關,CLI,Slack Bot,Sidecar和Web UI。
其他各種庫和服務可以在[github.com/micro](https://github.com/micro)找到。
### 社區
有一個有千名會員的松散社區。
在[slack.micro.mu](http://slack.micro.mu/)邀請你自己。
### 生態系統
Micro跨越單一組織。開源工具和服務正在由社區自己提供。
在[micro.mu/explore/](https://micro.mu/explore/)上探索生態系統。
## 我從哪里開始?
從[go-micro](https://github.com/micro/go-micro)開始。自述文件提供了一個微服務示例。
閱讀[入門指南](https://micro.mu/docs/writing-a-go-service.html)或查看[示例](https://github.com/micro/examples),了解更多信息。
使用[micro](https://github.com/micro/micro)工具包,通過cli,web ui,slack或api網關訪問微服務。
## 誰在使用Micro?
在[用戶](https://micro.mu/docs/users.html)頁面查看使用Micro的公司列表,(但注意它可能已過時)。
還有很多人也在使用它,但尚未公開列出。如果您使用Micro,請隨時添加您的公司。
## 我如何使用Micro?
這很簡單。
1. 使用[go-micro](https://github.com/micro/go-micro)編寫服務。
2. 通過[micro](https://github.com/micro/micro)工具包訪問它們。
3. 完成。
檢查完整的[greeter](https://github.com/micro/examples/tree/master/greeter)示例。
## 我可以替代Consul嗎?
可以! 服務發現注冊表與其他所有軟件包一樣,是完全可插入的。由于其特點和簡單性,Consul被用作默認值。
### ETCD
舉個例子。如果您想使用etcd,請導入插件并在二進制文件中設置命令行標志。
```
import (
_ "github.com/micro/go-plugins/registry/etcd"
)
```
```
service --registry=etcd --registry_address=127.0.0.1:2379
```
### 零依賴
有一個內置的零依賴的Multicast DNS服務注冊表配置。在啟動時將 `--registry=mdns` 或 `MICRO_REGISTRY=mdns` 傳遞給您的應用程序即可。
## 我可以在哪里運行Micro?
Micro是運行時不感知的。你可以在任何你喜歡的地方運行它。裸機上AWS,谷歌云。在你最喜歡的容器編排系統,如Mesos或Kubernetes。
事實上,在Kubernetes上有Micro的演示配置。查看[https://github.com/micro/kubernetes](https://github.com/micro/kubernetes)。
## API,Web和SRV服務有什么區別?

作為Micro工具包的一部分,我們嘗試通過分離API,Web儀表盤和后端服務(SRV)的關注點,為可擴展體系結構定義一組設計模式。
### API服務
API服務由Micro Api提供,默認命名空間為go.micro.api。micro API符合API網關模式。
點擊[此處](https://github.com/micro/micro/tree/master/api)了解詳情
### Web服務
Web服務由Micro Web提供,默認名稱空間為go.micro.web。我們相信web應用程序是微服務世界中的一等公民,因此可以將web儀表板作為微服務來構建。Micro網絡是一個反向代理,它會根據服務解析的路徑將HTTP請求轉發到相應的Web應用程序。
點擊[此處](https://github.com/micro/micro/tree/master/web)了解詳情
### SRV服務
SRV服務基本上是標準的RPC服務,通常這是你寫的服務。我們通常稱它們為RPC或后端服務,因為它們主要應該是后端架構的一部分,并且永遠不會面向公眾。默認情況下,我們使用命名空間go.micro.srv,但是您應該使用您的域com.example.srv。
## 它性能如何?
性能不是Micro的當前焦點。盡管代碼編寫為最佳并避免了開銷,但基準測試并沒有花費太多時間。與net/http或其他web框架進行比較是沒有意義的。Micro為包括服務發現,負載平衡,消息編碼等的微服務提供了更高級別的要求。為了比較,您需要將所有這些功能添加進來。
如果你仍然關心性能。提取最大值的最簡單方法是簡單地通過運行以下標志:
```
--selector=cache # enables in memory caching of discovered nodes
--client_pool_size=10 # enables the client side connection pool
```
## Micro是否支持gRPC?
是的。在[micro/go-plugins](https://github.com/micro/go-plugins)中有傳輸,客戶端和服務器的插件。
如果你想快速入門,只需使用[micro/go-grpc](https://github.com/micro/go-grpc)。
## Micro與Go-Kit
這個問題出現了很多。micro和go-kit有什么區別?
Go-kit將自己描述為微服務的標準庫。像Go一樣,go-kit為您提供可用于構建應用程序的單獨包。如果您想完全控制您定義服務的方式,Go-kit非常棒。
Go-micro是微服務的可插入RPC框架。這是一個自發的框架,試圖簡化分布式系統的通信方面,以便您可以專注于業務邏輯本身。 Go-micro非常適合您快速啟動和運行,同時擁有可插拔的基礎架構而無需更改代碼。
Micro是一個微服務工具包。這就像微型服務的瑞士軍刀一樣,微型服務以go-micro為基礎,提供諸如http api gateway,web ui,cli,slack bot等傳統入口點。Micro使用工具來指導邏輯上分離您的架構中的關注點,從而推動您為公共API創建一個微服務的API層,并為Web UI分別創建一個微服務的WEB層。
在想要完全控制的地方使用go-kit。你想要一個自用的框架使用go-micro。
## 我在哪里可以了解更多?
- **加入松散社區** - [slack.micro.mu](http://slack.micro.mu/)
- **閱讀博客** - [micro.mu/blog](https://micro.mu/blog)
- **如果你想談談** - [contact@micro.mu](mailto:contact@micro.mu)