我写了一个用Golang开发的API服务器的故事

首先

我创建了一个API服务器,该服务器将数据存储在Memcache服务器中,并根据请求适时地获取和格式化信息进行返回。

    • ロードバランサ

 

    • APIサーバ

 

    Memcacheサーバ

这是一个可以运行的组成。

服务器的结构

image1.png

事先资讯

从API服务器到Memcache服务器的访问需要至少1毫秒。
如果接收的数据量较大,将需要更多的时间。

首次发布时的处理

API服务器从Memcache服务器获取数据并整理后返回。
在高负荷时,API服务器对Memcache服务器的访问次数超过100次,总计需要100毫秒的计算时间。
由于其他处理也需要时间,平均需要大约80毫秒。

第二次发布时的处理逻辑

为了减少从API服务器到Memcache服务器获取数据的次数,我们决定利用API服务器的内存。当从Memcache服务器获取数据后,将其存储在API服务器的内存中。

image2.png

只要是访问相同数据,就可以从API服务器的内存中获取信息,因此能够在不经过网络的情况下进行处理,大大提高了处理速度。
同时我们还对其他处理进行了优化,例如将原来使用map的部分改为数组,以提高处理速度;平均处理时间也降低到了约5毫秒左右。

与众不同之处

    • Memcacheサーバから取得した情報はAPIサーバのメモリ内に保存しておく

ローカルのメモリサイズとmemcacheのデータサイズを見て、大きすぎるやつは除外しました。幸いにも1回しかアクセスしないデータだったのでさほど気にならない程度で済みました。
APIサーバのメモリ内に保存したデータを更新しなければならないのですが、Memcacheのデータ自体の更新が発生したタイミングで該当のデータを削除できるようにし、その通知方法としてはSocket通信1を使いました。

mapを使わずに配列で処理することで時間短縮

mapは便利ですが、やはり処理時間がかかってしまうので、どうしてもというところ以外では配列にしました。(つまり全部配列というわけでもありません)

总结

    • 今回詳しく触れなかったSocket通信も容易に書けて

 

    • さらに処理速度も申し分なく

 

    書いていて楽しい

Go语言有许多优点,是一门非常棒的编程语言,我强烈建议大家都来试着学写一下。

对于Socket通信,这次不会详细介绍。
bannerAds