我写了一个用Golang开发的API服务器的故事
首先
我创建了一个API服务器,该服务器将数据存储在Memcache服务器中,并根据请求适时地获取和格式化信息进行返回。
-
- ロードバランサ
-
- APIサーバ
- Memcacheサーバ
这是一个可以运行的组成。
服务器的结构

事先资讯
从API服务器到Memcache服务器的访问需要至少1毫秒。
如果接收的数据量较大,将需要更多的时间。
首次发布时的处理
API服务器从Memcache服务器获取数据并整理后返回。
在高负荷时,API服务器对Memcache服务器的访问次数超过100次,总计需要100毫秒的计算时间。
由于其他处理也需要时间,平均需要大约80毫秒。
第二次发布时的处理逻辑
为了减少从API服务器到Memcache服务器获取数据的次数,我们决定利用API服务器的内存。当从Memcache服务器获取数据后,将其存储在API服务器的内存中。

只要是访问相同数据,就可以从API服务器的内存中获取信息,因此能够在不经过网络的情况下进行处理,大大提高了处理速度。
同时我们还对其他处理进行了优化,例如将原来使用map的部分改为数组,以提高处理速度;平均处理时间也降低到了约5毫秒左右。
与众不同之处
-
- Memcacheサーバから取得した情報はAPIサーバのメモリ内に保存しておく
ローカルのメモリサイズとmemcacheのデータサイズを見て、大きすぎるやつは除外しました。幸いにも1回しかアクセスしないデータだったのでさほど気にならない程度で済みました。
APIサーバのメモリ内に保存したデータを更新しなければならないのですが、Memcacheのデータ自体の更新が発生したタイミングで該当のデータを削除できるようにし、その通知方法としてはSocket通信1を使いました。
mapを使わずに配列で処理することで時間短縮
mapは便利ですが、やはり処理時間がかかってしまうので、どうしてもというところ以外では配列にしました。(つまり全部配列というわけでもありません)
总结
-
- 今回詳しく触れなかったSocket通信も容易に書けて
-
- さらに処理速度も申し分なく
- 書いていて楽しい
Go语言有许多优点,是一门非常棒的编程语言,我强烈建议大家都来试着学写一下。