centos7でstart-stop-daemonが使いたいなと思い、
調べていると、epelレポジトリにdpkgというパッケージがあった。
https://apps.fedoraproject.org/packages/dpkg/
ってわけで、
# yum install dpkg --enablerepo=epel
で、start-stop-daemonコマンド入りのdpkgがインストール可能である。
ソースからビルドする必要あると思っていたのに。。
以上
IT系のめもを蓄積していこうかと
centos7でstart-stop-daemonが使いたいなと思い、
調べていると、epelレポジトリにdpkgというパッケージがあった。
https://apps.fedoraproject.org/packages/dpkg/
ってわけで、
# yum install dpkg --enablerepo=epel
で、start-stop-daemonコマンド入りのdpkgがインストール可能である。
ソースからビルドする必要あると思っていたのに。。
以上
Google Computer Cloud(以下、GCP)で、
グローバルロードバランサの背後にnginxを置く場合は、
keepaliveをしておこう。
(参考)
https://blog.percy.io/tuning-nginx-behind-google-cloud-platform-http-s-load-balancer-305982ddb340
これやっておかないと、結構502がでる。
ちなみに、650秒をkeepalive_timeoutにするなら、
ロードバランサのタイムアウトは600秒程度、つまり少し短めがよいとのこと。
実は、AWSのELBも同様。
とはいえ、結構な高負荷にならないと、本事象は目立ってこないので、
なかなか難しいところである。
以上
std::unorderd_mapになんでも入れてみた。
とりあえずコード。
class Session
{
private:
std::unordered_map<std::string, std::shared_ptr<void>> values;
public:
template <typename T>
bool getValue(const std::string &name, T *value)
{
std::shared_ptr<void> data = values[name];
if (data != nullptr) {
void* raw = data.get();
*value = *((T*) raw);
return true;
}
return false;
}
template <typename T>
void setValue(const std::string &name, T *value)
{
values.emplace(std::make_pair(name, std::make_shared<T>(*value)));
}
};
struct STest
{
int m1;
std::string m2;
};
int main()
{
STest t1{2, "hoge"};
Session s;
s.setValue<STest>("key", &t1);
STest t2;
if (s.getValue<STest>("key", &t2)) {
std::cout << "m1:" << t2.m1 << ", m2:" << t2.m2 << std::endl; // 2, hoge
}
}
となる。
コンテナから引き出す時に、無駄に1回生成が走るから、
大きいインスタンスでは注意が必要。
で、なぜこれをつくるかというと、
例えばTCPの常時接続の際、
セッションで引き回せると、
簡単に値を保持できるという狙いのため。
とはいえ、ポインタのキャスト多いから、大丈夫かはわからん。。
確実な使い方しないと危なそう。。
以上