アーカイブ「2018年04月」

centos7でstart-stop-daemonが使いたいなと思い、

調べていると、epelレポジトリにdpkgというパッケージがあった。

https://apps.fedoraproject.org/packages/dpkg/

 

ってわけで、


# yum install dpkg --enablerepo=epel

で、start-stop-daemonコマンド入りのdpkgがインストール可能である。

ソースからビルドする必要あると思っていたのに。。

 

以上

投稿日時:2018年04月21日 23:37   カテゴリー:centos, fedora   [コメントがあればどうぞ]

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も同様。

 

とはいえ、結構な高負荷にならないと、本事象は目立ってこないので、

なかなか難しいところである。

 

以上

投稿日時:2018年04月09日 23:07   カテゴリー:gcp, nginx   [コメントがあればどうぞ]

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の常時接続の際、

セッションで引き回せると、

簡単に値を保持できるという狙いのため。

 

とはいえ、ポインタのキャスト多いから、大丈夫かはわからん。。

確実な使い方しないと危なそう。。

 

以上

投稿日時:2018年04月09日 22:49   カテゴリー:c/c++   [コメントがあればどうぞ]