サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
sgykfjsm.github.io
Goはgo routineを使って並行処理を容易に書くことができるが、下手に書くと色々なfunctionが相互に入り乱れて処理が追いづらいときがある。ここではGoでfunctionをトレースする方法をメモしておく。 結論から言えば、runtime.Callerを使えば良い。なお、debug.PrintStackでstack traceを出力することができるが、標準エラー出力となるのでちょっと使いづらい。しかし、ただコンソールで出力したいだけなら、debug.PrintStackのほうが簡単であるし、これ以降を読む必要は無い。 func Caller func PrintStack 簡単な使い方 runtime.Callerとは何なのかはマニュアルを参照すべきだけど、簡単に言うと、引数の数値に応じてCallerが呼び出された時点での呼び出し元の情報を提供してくれるfunctionと言える。例
前回の続き。全体的にちょっとアレなところが多いので、もう少しリファクタリングを行なう。今回のリファクタリングの元ネタは以下。元ネタのほうが説明が簡潔だしコードが綺麗なので、元ネタを読めばコレを読む必要は無い。 Go actions responses 主処理の結果を受け取りたい。 見出しの通りなんだけど、例えば現在のロギング内容にステータスコードを出力したいと思ったら、主処理から処理結果を受け取り、HTTPステータスコードを取り出す必要がある。また、事後処理にHTTPステータスコードを設定させるようにするのも同様だ。しかし、現在のハンドラからは処理結果を受け取ることができない。なぜならば、各Middlewareはhttprouter.Handleをハンドラとして定義しており、httprouter.Handleは以下のように定義されているからだ。 1 2 3 4 // Handle is a
JSONを返すRESTful APIを作ることになったので諸々の復習を兼ねてMaking a RESTful JSON API in Goを読む。そのままだとつまらないのでところどころ微妙にアレンジしながらやってみる。 A Basic Web Server RESTfulなAPI Serverを作る場合、当然の事ながらWeb Serverとして提供することになる。周知の通り、Goの場合はnet/httpを使って簡単にWeb Server Applicationを作ることが出来る。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package main import ( "fmt" "html" "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r
JenkinsでgolangプロジェクトをCIするときに少しハマったので、同じミスをしないで済むようにここにメモする。 Jenkinsでgolangを使えるようにする。 何はともあれ、これをしないことには始まらない。特に理由が無ければ、Jenkinsのプラグインを使うのが良い。 “Jenkinsの管理” > “プラグインの管理” > “利用可能”タブ へ進み、フィルターで”golang”と入力すれば、Go pluginが見つかる。チェックを入れた後、”ダウンロードして再起動後にインストール”を押下する。 再起動後、”Jenkinsの管理” > “システムの設定”へ進むと、”Go”のセクションが追加されていることが確認できるはず。 もしシステムの管理で”ロード中”から復帰しない場合、”Jenkinsの管理” > “プラグインの管理” > “高度な設定”タブ へ進み、画面右下の”更新”ボタンを
既知の通り、BeanstalkでDockerを使うことができるが、通常の使い方だとインスタンスが配備される度にDocker ImageをPull、BuildしてからRunする。初期配備時は問題ないが、スケールアウトの観点で見た場合、非常にもたつくことがある。また、Docker Imageが大きい(800MB以上ぐらい?)と、devicemapper errorでBuildに失敗することが多い(ような気がする)。単にBuildに失敗しただけであれば切り離せば良いが、複数台のうちいくつかがBuildに失敗しただけでは検知が難しく、そのまま生き残ってしまうとムダなコストが発生する。 上記のような認識でいたため、これまではBeanstalkでDockerを運用することにはあまり乗り気ではなかった。しかし、同僚からの意見で予めデプロイしておいたカスタムAMIを使うのはどうか、という意見があり、検証す
AWSなんかを使ってると、イチからMySQLなどの基本的なミドルウェアをセットアップすることは減ってくる。そんな中、AnsibleでMySQLをインストールする事になったのだけど、意外と忘れてたりAnsibleで作業するのと手作業で進めることの差異でちょっと詰まったりしたので、ここに備忘しておく。 大まかな手順 最新安定版(MySQL5.6)をインストールするためのリポジトリを設定する。 リポジトリ軽油でインストールする。 初期セットアップを行なう。 rootのパスワード初期化 mysql_secure_installationによるMySQLの初期化 諸々の設定 たったこれだけなんだけど、Ansibleでこれらの作業を実装するのはちょっと面倒。というのも、mysql_secure_installationはコマンドを実行すると対話的に処理を進めることになるが、これをAnsibleで実行す
MySQL Casual Talkと勘違いしてたけど、とても勉強になった。 以下はメモ。 MySQL Cluster大地に立つ! 「5.6とは違うのだよ、5.6とは!」 @RKajiyamaさん MySQLクラスタとは MySQL Cluster 独立した製品 MySQLのクラスタリングのことではない v7.3 MySQL Serverとは違う。共通点はあるけど。 MySQL Serverとの最大の違いは分散型DBであること。 共有ディスクはいらない メモリが豊富で性能の優れたディスクを持つサーバ 全ノードがアクティブ シェアードナッシング 共有ディスクは不要 全オード多重化 ノードを増やすことで負荷分散と多重化を図ることが可能 多重化はRAID0と同じ アプリケーションレイヤから見るとACID KVSとして利用可能 MySQL Serverを経由せずにアプリケーションから直接Cluste
elasticsearchの調子が悪かったので、いろいろ調べていた。その途中でnofilesの上限を調べようと思って、以下のようにコマンドを叩いたらコマンドが見つからないって言われた。 $ sudo -E -u elasticsearch 'ulimit -Sn' sudo: ulimit -Sn: コマンドが見つかりません で、あれ?って思っておもむろに確認してみたら、ulimitはcdとかechoのようなビルトイン関数だった。 $ which ulimit /usr/bin/which: no ulimit in (~/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/fujishima/bin) $ whereis ulimit ulimit: /usr/includ
RDSのMySQLでオンラインメンテ、つまり無停止でのスキーマ変更などをどうやれば良いか、という話。 今までは色々小細工をして生のALTER文を発行していたけど、さすがにロック時間とかが気になり始めたので調べた次第。 ざっとググると、pt-online-schema-changeというツールを使うと良さそうだったので、ここにその作業ログを残す。 以下は参考にしたブログ記事など。 pt-online-schema-changeを利用して無停止でスキーマ変更 @frsyukiさんのツイート Can I CREATE TRIGGER in an rds DB? なお、別のツールでoak-online-alter-tableというものがある。oak-online-alter-tableに関する記事は以下が参考になる。 MySQLでサービス停止のないALTER TABLEの検討 事前準備 pt-on
事前準備 EC2インスタンスを適当に2つ用意する。今回はmicroを2つ用意した。 インスタンスを立ち上げる時には必要なポートの開放を忘れずにしておく。大体は22(SSH), 80(TCP), 8888(TCP), 24220(TCP/UDP), 24224(TCP/UDP)とかを空けとけば大丈夫。 インスタンスが立ち上がったら、ログインしてとりあえずgitをインストールする。 [ec2-user@localhost ~]$ which git /usr/bin/which: no git in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin) [ec2-user@localhost ~]$ sudo yum install -y git インストール
mesosをインストールする場合、ソースをコンパイルしてインストールすることが公式のGetting Started with Apache Mesosに記載されているが、この方法だとコンパイルに非常に時間がかかる(10分から20分ぐらい)ので、mesosphereが提供しているパッケージを利用したほうが良い。 ここでは、パッケージからインストールする手順をまとめる。 事前準備の前に mesosだけを動かすならたぶんメモリは512MBとかでも動くと思うけど、実際にはmesosの上でHadoopやSpark、Chronosを動かす必要がある、というかこれらのアプリケーションと協働しないと意味がないので、クラスターのノードには2GBぐらいのメモリとCPUは2発以上欲しいところ。とりあえず動かすならCPUは1発でも大丈夫。 また、mesosのWeb UIではSlaveがホスト名で表示され、その情報
会社のPCがWindowsで、VMはプロキシの関係でインストールできなかったので仕方なく。 で、ここにあるやり方に従った。 msysgitをインストールする ここから最新版を取得してインストールする。 http://code.google.com/p/msysgit/downloads/list インストール後は、Git\binにpathを通しておくこと。 必要なutil-linuxをインストールする。 util-linux-ng for Windowsから以下の2つをDLする。 Binaries Dependencies Binariesからはgetcp.exeを、Dependenciesからはlibintl3.dllをそれぞれGit\binにコピーする。 gitflowをインストールする。 コマンドプロンプトを立ち上げて、いつもgitリポジトリをクローンしている場所に移動する。特になけ
このページを最初にブックマークしてみませんか?
『sgykfjsm.github.io』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く