NginxでTCP接続をトンネル
備忘録用のメモ
NginxでTCP接続のトンネルを行う場合、nginx.confに以下のようにstreamを設定することで行えます。この場合nginxの3456ポートに対して127.0.0.1:6543にプロキシします。
```
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
stream {
server {
listen 3456;
proxy_pass 127.0.0.1:6543;
}
}
```
プログラム書くのも簡単ですが、既存のNginx使う方が信頼性的に良さそうです。
steavevaivai.hatenablog.com
Rustで関数型プログラミング
Rustで関数型プログラミング
Haskellでtree型のデータ構造のfmap, foldMapを実装し、Rustでも同様のことをやってみたいと思います。
- Rustで関数型プログラミング
S3分析環境構築メモ
AWS分析環境構築メモ
S3
S3の料金計算をもとに検討内容を確認
https://calculator.aws/#/addService/S3
リージョンはどうなるか?
どのストレージを使う?
https://aws.amazon.com/jp/s3/storage-classes/
↑の S3 ストレージクラスのパフォーマンスを見て判断するS3 Management and Analytics
s3に置いたオブジェクトからダッシュボードを出すらしい
https://aws.amazon.com/jp/blogs/news/s3-storage-lens/S3 Object Lambda
S3へのGETリクエストに対して手を加えることができるらしい
https://aws.amazon.com/jp/s3/features/object-lambda/S3 Standard料金考慮事項
S3 Standardで利用中のデータサイズ
S3 Standard に対する PUT、COPY、POST、LIST リクエスト
S3 Standard からの GET、SELECT、および他のすべてのリクエスト
S3 Select によって返されたデータ量
S3 Select によってスキャンされたデータ量
分析機能考慮
S3 select
S3 Select は、GZIP または BZIP2 を使用した CSV および JSON オブジェクト、サーバー側暗号化オブジェクトの圧縮もサポートしているらしい。
https://aws.amazon.com/jp/blogs/news/querying-data-without-servers-or-databases-using-amazon-s3-select/
s3 select自体は制限が多く一つオブジェクトをもとにデータ取得でjoinなどはできないAthena + Glue
GlueはETLの役割を果たしS3上(s3以外でもクロールする)のオブジェクトを取り込んで定義済スキーマに保持し、Athenaにて分析用のクエリを実行できるその他
簡単に確認したいということであればS3に上げる必要もなくpythonでpandasで読み込むなりでも良さそうである
運用検討
前提として元データは自社構築のHDFSおよびDB上にあるので、分析に必要な分だけAWSに上がっていれば良い
- データの保持期間はどうするか? データの削除はどうなるのか(スクリプトを書く必要があるか?)
- 消した後のデータを見たい場合の再アップロードはどうするか?
- s3 selectやathenaではobject指定でselectとなる(Hiveではテーブル指定でパーティションを日付で分けていたのでわかりやすかった、hdfs上の元データはhash化された文字列も付与されているので命名規則を決めて取得元のオブジェクト名がわかるようにしておく必要がある)
- 保存先バケットはどうするか(テーブル毎になると思うが、その前に分析基盤識別文字/データ元/テーブル名とスラッシュ区切りにしておくか)
- 権限グループについて(開発はアップロード、修正、参照ができて、分析者はselectだけ出来るぐらいか)
AWS マネージドポリシー: AmazonS3ReadOnlyAccess
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/security-iam-awsmanpol.html
athena側はどうなるか?
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/managed-policies.html
C++でstd::stringをスレッドセーフにする
c++を使っている時マルチスレッドで一方は文字列の更新、もう一方は更新した文字列のコピー取得をしていたのですがおかしな動きをすることがありまして、 例えば、以下の動きを確認すると
#include <iostream> #include <mutex> #include <string> #include <thread> int main(int argc, char *argv[]) { std::string update; std::string copy; auto updateFunc = [&update]() { bool a = true; while (true) { if (a) { update = std::move("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); } else { update = std::move("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"); } a = !a; } }; auto copyFunc = [&update, ©]() { while (true) { copy = update; if (copy != "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" && copy != "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb") { std::cout << copy << std::endl; } }; std::thread t1(updateFunc); std::thread t2(copyFunc); t1.join(); t2.join(); }続きを読む