銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

ASP.NET Core on Linux で Session Replication するにはNFSが必要そうだというお話

ASP.NET Core でSession Replication (Sessionを外部で管理して、複数台で動かしても、また再起動したあともSessionデータを利用できるようにする)をやろうと考えた時のお話です。まだ確信をもっているわけではないのですが、調べたことをまとめるのも兼ねて記事にしました。

まずASP.NET Core でのアプリケーションの状態管理(リクエストの間だけ有効とかSessionとか)についてはこちらのページに記述があります。

Managing Application State — ASP.NET documentation

この項に記述がありますが、IDistributedCacheというインターフェースを通してDI経由で分散キャッシュの仕組みを容易に導入することができます。また導入しておくと、セッションもこのキャッシュを利用して保存される仕組みになるようです。ASP.NET チームの実装としては現在SQLServerとRedisが利用可能になっていました。

NuGet Gallery | Packages matching Microsoft.Extensions.Caching

ただ、Redisについては.NET Standardには対応しておらず、別の方の実装が利用可能です。

www.nuget.org

で、ここまでを使えば、.NET Core on RHEL な環境でもRedisを使って分散キャッシュでSessionを管理できます。が、問題はここからで、これだけだと再起動後にマシンが変わる、具体的にはContainerを利用していてデプロイのたびにContainer を作り直すような環境では再デプロイのたびにSessionが新規に発行されます。この理由を実装を追い掛けながら確認していたのですが、どうやらクライアントから送信されているCookieの値をSessionIdと関連付ける部分にマシン固有で生成している値を利用しています。この部分については「Data Protection」という名前で解説されています。

Configuring Data Protection — ASP.NET documentation

この実装を見る限り、Linuxから使うためには、複数マシンにNFSをマウントする、などのファイル共有を利用する必要がありそうです。

github.com

RedisだけでなくNFSの利用も必要なのがいまいちな感じなので、roadmapとあわせて調べていく予定です。

YAP(achimon)C::Asia Hachioji 2016 mid in Shinagawa で .NET Core on Linux について飛び入りトークしてきました

yapcasia8oji-2016mid.hachiojipm.org

2日目の日曜の朝に飛び入りトークしてきました。以下が資料になります。

doc.co

.NET Core のRTMが6/27に決まったあと、そうだYAPCで話そうと思ったもののすでにセッションは締め切られていたので、飛び入りトークとして話してきました。最初はわざわざ飛び入りトークルームに聞きに来る方いるかなあと懸念していましたが、ありがたいことに話し終わった後も(次の飛び入りがまだ入っていないこともあり)しばらくQ&A的にいろいろ面白い話をすることができました。

続きを読む

Microsoft MVPを再再々受賞しました

4年目になりました。カテゴリはVisual Studio and Development Technologies になります。

今年の4月からRed Hatに転職したこともあり、今後1年くらいで広めていきたいテクノロジーは大きく、.NET Core on RHELとRed Hat on Azure*1の二つです。まずは触ってもらわないといけないフェーズですので、どんどん情報発信していこうと思います。C#界隈は今までもでしたが、AzureやLinuxな方々のところにもお話しする機会があれば幸いです。

登壇や執筆依頼などありましたら是非よろしくお願いします。

*1:RHELだけでなく、OpenShiftやAnsibleも含めた製品群