メモ置き場
作成日時:2024-12-02
更新日時:2024-12-02
メモ置き場。見出しもばらばら。
いつかまとめる。
・作業をするなら目的を定めろ
→何がしたいのか
負荷試験をするならどういったデータを作ってどう登録し、どういう指標を取るのか。
・コーディング規約 / コードレビュー / 設計書
→設計書が無いと属人化を招く。実装者にしか分からんから。
設計書が無くてもコードを見ればいいが規約やレビューがなされていなければ可読性が低い。
情報連携
チームへの外部打合せ内容の展開は絶対。
- format-hex
- Wai-aria
- 自己文書化
- ssh+keyscan
- ssh、パスワード無くても認証行ける件
- サクラエディタ重複排除⇒選択してからAlt + M
- springメッセージ変更はプロファイル
- デフォルトに全部定義してプロファイルに差分
- デフォルトにフォールバックするにはpropertyに定義
- JUnit、カバレッジはデフォルトで見られる
- LBでHSTS
- IDまたはPW
- F5は実質的なキャッシュ確認には使えない
- 少なくともページは必ず取りに行っている
- Markdownこそパラグラフライティング
- 真っ先にコストの話をする
- マネージャーや顧客はそこに重きを置いているだろうから
- 追跡可能性のあるログ
- 根本原因分析
- 何故それが必要か
- Webアプリってプレゼンテーション基盤がブラウザだから、そこのメンテしなくてよくて楽だよね
概念への名づけは脳内インデックスの付与行為
書き手を想像してメンタルモデルを切り替えろ。
Linux向けならLinux向けにビルドするが如く。
タスクの依存関係
ファインマンテクニック
説明する人がいないならば、脳内の自分に対して説明する。
ある意味、アクティブラーニングの最下層「人に教える」を行っていると言える。
CQRS
イベントソーシングとTime Series Databases
ストラングラーパターン
システム移行戦略「レガシーミミックパターン」&「ストラングラーフィグパターン」とは? - Qiita
クラウドのコントローラー
サービスを管理する奴。
- IaaS:OpenStack
- Pass:CloudFoundary
インフラ
基本的に機能はどこのサーバーに置いてもいい。
- SSL終端
- プロキシ
- WAF
- LB
SSL終端をLBにやらせたりサーバーにやらせたり。
WAFに金がかかるならWEBサーバーに入れれば?ModSecurityとか
YAMLにタブを使うな
仮想化
ホスト型⇒ハイパーバイザ⇒Docker⇒wasm⇒wasm cloud。
- ホスト型:ホストOS上の仮想化ソフト上に仮想OS
- ハイパーバイザ:ハイパーバイザ上に仮想OS
- Docker:コンテナエンジンの上にコンテナ
WASMを実行するためのランタイム、wasmCloudがCNCFのサンドボックスに | Think IT(シンクイット)
ProxyによるIPの隠蔽
Design Doc
- 何を何のために、どのように作るか。
- システム開発をするにあたっての、大まかな概要。
- 詳細な情報はソースとか設計書を見ろというスタンス
- テンプレート/フォーマット/内容は自由。
- BOSCARとADRを含んでもよろし
フォーマット案
とりあえず自分が書くのならば、下記の感じ。
減らしても、増やしてもよい。
- システム名称
- 目的(Objective)
- 背景(Background)
- やるやら(Scope)
- 制約条件(Constraint)
- 前提条件(Assumption)
- 成果物(Report)
- システム構成図
- ADRまたは代替案を提示し、何故そうしなかったかを記載
- 言語とか技術とか
- 各サブシステムの説明
- ドメイン的な話
- 用語集
- 特殊なフロー
- ゴール条件(終了条件)
- マイルストーン
- 参考文献
- 変更履歴
システム化の対象
クラスもテーブルもヒト・モノ・コトを表せ
みずほ
- フェールセーフ
- RCAの重要性
- Sysmfowareの謎仕様
- インデックスをメモリに置く際の上限
- SOA / ESB
- みずほの体制
- 事なかれ主義
- 言うべきことを言わず、いわれたことしかやらない
クレジットカード
- CARDNET
- CAFIS
npm脆弱性確認
npm audit
npm audit fix
RAID10とRAID01
- 01:ストライピングしてミラーリング
- 10:ミラーリングしてストライピング
ストライピングは片方が壊れたら終了。
01はRAID0構成部が1台でも死んだら終了。
10はRAID1構成部が2台とも死んだら終了。
「RAID01」と「RAID10」の違い|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
ベクトル化
同じ操作を一度に複数の要素に適用するCPUの機能。SIMD。
PythonのNumPyとか。
JavaならばJVMが勝手にやってくれたり、JNIやVector APIなどがある。
Vector APIはまだ正式化されていない。
Java 22新機能まとめ #OpenJDK - Qiita
高負荷回避
DB
別のDBなどに保存して、後で反映。
- Redis:速い
- NoSQL:高負荷得意
- Queue
AP
制限設けて429を返すとか。
vscodeでサーバ起動できる
FURPS+
複数台サーバー
スティッキーセッションかredisまたはdb。
MQのbrokerを分散させたのがApache Kafkaという認識。
フロントで画像圧縮
エッジでも。
静的サイトにおけるCSRF
サーバー側でcookieに書き込むか、JSでtoken取得用API叩く。
外部アクセスは遅くなる
- 過剰なマイクロサービスはオーバーヘッドが大きい
- DB:やり取り/データ量を小さくすべき
- WEB<=>APもオーバーヘッド
多少おそくなってもやりたいことがあるならば、それをすべき。
クラウドならコストかかりそうだけど。
- 障害の局所化
- (機能としての)役割分担
- 最小権限
- スケールアップ/ダウン
確認する
- レスポンスヘッダの確認
- レスポンスは圧縮してるか
- キャッシュ系
- セキュリティ
- CSRF
- CSP
- XSS
- iframe
- js検索したらtoken入ってないか
- 検索
- ページング遅くないか
- 最後のページを表示する場合など
- インデックスは使ってそうか
- 絵文字、特殊文字(文字数カウントとか)、外字
- ダウンロードファイル内容
パフォーマンス
「小は美なり」
- APログの抑制
- ディスクI/Oが発生する
- 追跡可能な最小限のログを出す
- DBのチューニング
- コネクションプールの設定は最適化
- キャッシュの採用
- セキュリティに注意。他人のデータを表示しかねない。
- 静的データのキャッシュ
- APレベルでのキャッシュ
- アーキテクト
- サーバーレスが安いかもね
- Lambda + S3+ Amazon Aurora Serverless
- ソースの見直し
- 下記をなくす
- 無駄なDBアクセス
- 無駄なディスクI/O
- N + 1
- 可読性を下げる無駄なラムダ
- コーディング原則無視
- 下記をなくす
- レスポンスの圧縮
マルチテナント
1システム1会社から、1システムで複数会社をまとめる。
クラウドの資産は減らせる。
セキュリティ関連の被害を局所化できる。
DBへのレコード追加により、無停止で会社を追加できる。
懸念点は多い。
- データ量の増大
- パフォーマンス悪化
- バックアップ時間の増大
- アクセス量の増大
- セキュリティ
- 他の会社のデータが見られてしまったり
- メンテスケジュールのすり合わせ
- 障害対応
- 個社対応のやりかた
- フィーチャーフラグ
- ログインユーザの一意性
DBのセキュリティに関しては、RLSでDBユーザごとに参照する行を制限するのもいいが
パフォーマンスは低下するし、設定ミスをしたらまずい。
CDNにおける圧縮ファイルの供給
(AWS CloudFront) 圧縮ファイルの供給
CDNでWEB高速化 コンテンツ圧縮(gzip)の設定と注意点
転送量の削減により、料金の節約と表示スピードの改善が出来る。
CloudFrontはデフォルトで設定がOFFらしいので設定すべき。
protocol buffers
gRPCで使われたりする。
スキーマ(構造)言語。
- 定義からソース出せたりする。
- 定義を元にJSONやByte吐いたり出来る。
- ByteをDBに突っ込んだり
- 型安全
- いろんな言語対応。JavaScriptも。
- gRPC以外に使ってもよい
EXCEL
- エクセルでワイルドカード使える
VLOOKUP
取得する値が空白の場合、“0”が返却されるので、それが嫌ならば
=VLOOKUP()&""
で空白に変換できる。
フィーチャーフラグとアクセス制御
権限やデプロイ先に応じて処理の有効無効を切り替えるのは、フィーチャーフラグではない。
ただの機能制御。
フィーチャートグル
複数のソースコードのブランチ(機能ブランチ)を維持するのとは別の方法を提供しようとする手法
- 新機能の段階的なロールアウト
- A/Bテスト
- 実験的な機能の制御
- 特定の環境や状況での機能の有効/無効の切り替え
トランクベース開発などで、ブランチの複雑性の解消やビックバンリリースの回避をしたりするときに使う。
開発が終わっていないものをリリースできたりする。()
BFF
ある意味Facadeパターンだよね。
キャッシュスタンピード/ドッグパイル
キャッシュが切れた時、オリジンへ大量のアクセスが発生すること。
対策
- 事前に再生成
- 取得のシングルトン。ロック掛けて順番に再生成。
ZOZOTOWNリニューアルで実施したCache Stampede対策 - ZOZO TECH BLOG
カスケード障害
システムの一部で発生した障害が連鎖的に波及し、システム全体に影響を及ぼす現象を指す。
2021年のみずほ銀行みたいなやつ。
サーキットブレーカー
障害発生時にタイムアウトまで待たせず、即遮断する。
タイムアウト
タイムアウトしても処理は続く。
クライアントに返しただけで、バックは継続。
ログ出力
当然ながら大量に書き込むとパフォーマンスは低下する。
しかもそれが並列プロセスから書き込みされるならば、1時間単位で処理が遅くなったりする。
書き込み待ちとかで。
検索結果が多すぎて応答が遅い場合
下記の方法がある。
- 一般的なページング。ページリンクを押したら、オフセット使用して取得する。
- 検索結果を既定の件数で打ち切り、それ以降の情報が欲しければ、検索条件を指定するように促す。
- 規定件数 + 1でLIMITして、件数 = 規定件数 + 1ならば、超えているという判定。
- 検索条件を必須にする。
VBA小ネタ
自作関数を呼んだセルを取得する
Set callerRange = Application.Caller
rowNum = callerRange.Row
colNum = callerRange.Column
自作関数で#N/Aを返す
CVErr(xlErrNA)
MQTT-QoS
QoS 0. 最大1回
QoS 1. 最低1回
QoS 2. 1回
EDNS0
UDPが512バイトまでではなく、4096まで可能になった。
CDNにおける最適なCDNエッジを返却。