ITベンダから見たPostgreSQL - PGConf ASIA · 勉強会活動から、JPUG、PGEConsまで...
Transcript of ITベンダから見たPostgreSQL - PGConf ASIA · 勉強会活動から、JPUG、PGEConsまで...
1
ITベンダから見たPostgreSQL~これからPostgreSQLを始める方へ~
PGConf.ASIA 2018 DAY 0(プレユーザカンファレンス)
日本電気株式会社
AIプラットフォーム事業部
湯村 昇平
3
本日お話したいこと
対象
目的
ITベンダ/エンジニアとしてPostgreSQLを取り扱うことを検討している方
PostgreSQLの様々な事業に取り組んできたITベンダの視点で、PostgreSQLを知って頂く
※ 本資料に掲載された製品名、会社名、及びロゴは各社の商標または登録商標です
© NEC Corporation 2018
Agenda
1. PostgreSQLとITベンダ
2. NECの対応経験から語る、PostgreSQLを活用する上での課題への対処
3. ITベンダ視点で見たPostgreSQL
4. NECのソリューション紹介
5. まとめ
1. PostgreSQLとITベンダ
6
PostgreSQLは、商用での利用が容易
複雑な印象のOSSライセンスの中でも、ライセンスの縛りが大らか
▌ライセンスはPostgreSQLライセンス(BSDベース)
著作権と免責事項を引用すれば『組み込みも改造も非公開も再配布も、自由』
PKGの組み込みDBだったり、付加価値を付けて売ったり商用利用がとってもしやすい
・著作権者のコピーライト・いかなる問題にも責任を負わない
組み込み利用で配布
改造し、製品として配布
LICENSE https://www.postgresql.org/about/licence/
© NEC Corporation 2018
7
PostgreSQLはOSSとして良好な形で発展している
OSSはユーザ企業、開発サポート企業、コミュニティの3者がWIN-WINの関係を保つことで、強固に発展を遂げていくことができる
▌PostgreSQLは、そうなっているといえる
© NEC Corporation 2018
対価を支払う
サポートと付加価値を提供
バグ報告開発者の輩出
普及が進むことでコミュニティ参加者が増える
無償で利用可能
要望機能を取り込む
ユーザ企業
開発/サポート企業
開発コミュニティ
8 © NEC Corporation 2018
ITベンダはPosgreSQLでどんなビジネスを展開しているか
Transparent Data Encryption for
PostgreSQL
▌自社システム/PKGに組み込んで活用する
まずはここからが多い。無償で使えて、商用的な自由度も高いDB
▌サポートとして技術力を提供する
自社で使って構築したノウハウを基に専門部隊を結成
社内、グループ会社のみサポートする部隊か、社外にもサポートを提供するかでわかれる
▌改造して新たな製品として提供する
独自に付加価値をつけて、新たにライセンス製品として販売
DB本体の場合と、標準のPostgreSQLにアドオンする周辺ツールの場合がある
9
NECの場合
サポートサービス、PKG組み込み、対応製品、周辺ツールを展開
© NEC Corporation 2018
NEC Cloud PaaSデータベースサービス
透過的暗号化
クラスタリング
DBaaS
統合監視
TDE for PostgreSQL
運用保守から導入/移行支援まで対応
13年間、のべ12000台500PJを支援してきました
サポートサービス
10
PostgreSQL のコミュニティ
▌コミュニティは大きく分けると3種類
本体の開発を手掛ける、開発コミュニティ
周辺機能/ツールを開発する外部コミュニティ
利用者としてノウハウを共有したり、普及を推進するコミュニティ
© NEC Corporation 2018
Core Team(5名)
Major Contributors(39名)
Contributors(46人)
PostgreSQL本体の開発コミュニティ
pgpool-II
Slony-I
PostGIS
pg_statsinfo
・・・
周辺機能を開発する外部コミュニティ
普及を推進するコミュニティ
日本PostgreSQLユーザ会
11
コミュニティにはどう関わるのか
まずは利用者として。利用規模が大きくなれば開発/サポート企業になり、バグ報告やレビュアー参加、ゆくゆくはContributorsの輩出も
▌ユーザコミュニティに参加して、普及を盛り上げる
勉強会活動から、JPUG、PGEConsまで
▌自社製品、システムへの利用やサポートでバグを発見し報告する。または、レビューに参加する
▌自社向けに改造した機能や欲しいと思った機能を周辺ツールとして公開する
OSSで公開すると大きな貢献に⇒NECはTDEforPGを公開し、別途有償版でマネタイズ
内部構造に詳しくなり、コミュニティと議論できる人やContributorsを輩出すれば、要望機能を本体に取り込めるかも
Transparent Data Encryption for
PostgreSQL
2015年GitHubで公開
JPUGカンファレンス
© NEC Corporation 2018
12
NECはPGECons結成にも関わりました
2012年発足時から理事企業(運営委員長を担当)として参加PostgreSQLのエンタープライズ利用に貢献
© NEC Corporation 2018
PGECons 検索
2. NECの対応経験から語る、PostgreSQLを活用する上での課題への対処
14
PostgreSQLへの取り組みを始めるなら
ノウハウをどうやって身に着けるか
▌弊社の場合は、問い合わせ受ける⇒該当箇所のソースを見る、という地道な取り組みからスタートしました
まずは問題のありそうなログを確認。そのログをもとにソースを検索したり、関連する動作の流れをおいかけたり・・・
ソースを読むならIDEなどのデバッガを使ってステップを追っていく
▌今は技術書だったりWebの情報が結構あります
▌Webで検索しても出てこない場合はトライ&エラーの世界
PostgreSQLで〇〇ってできるの? ⇒ VMや実機で検証確認
© NEC Corporation 2018
15
ノウハウ習得 技術情報は比較的容易に入手可能
一般的な書籍やWebサイトの情報でかなりの技術情報が手に入ります
▌技術書(例)内部構造から学ぶPostgreSQL 設計・運用計画の鉄則
PostgreSQL 全機能バイブル
▌Webサイト
PGECons技術部会 成果物総索引⇒ https://www.pgecons.org/works_index/
slide shareによる勉強会/講演会 資料⇒ slide share内の検索で1000件超!
© NEC Corporation 2018
16
DBとして求められるノウハウは基本的に変わらない
全体の設計から構築までの検討項目と流れは他のRDBMSと共通
© NEC Corporation 2018
© NEC Corporation 2018
論理設計(テーブル設計)
物理設計(ストレージ等)
SQL設計
パラメタチューニング
インフラ選定バックアップ・リストア
可用性構成
運用設計 DB監視
17
トラブルに遭遇したら
▌問題が発生したタイミングのログを確認
設定によっては十分な情報が出てないこともそうなるとprefixやログレベルを変えて再現待ち、また再現評価することに
ERROR以上のログが出ていれ原因も特定しやすいが、そうでなければ統計情報(ロックの状況)やOSリソースなども併せて確認する必要が生じる
▌近年は原因がDB側でない場合がほとんど発生しやすいトラブルのパターン、疑うポイントは他のRDBMSと一緒
HWのスペック不足(VMで起こりがち)でディスクI/Oが遅延
AP側の作りの問題。トランザクションを閉じていないとか
▌PostgreSQL固有の問題があるとしたら、他のRDBMSのノウハウで取り組み、仕様差にハマることがある(後ほど紹介)
© NEC Corporation 2018
18
ログの出力設定は重要
トラブル時の命綱。prefixとローテーションの設定を必ず見直すこと
▌何をログに出すかを、log_line_prefixの値で設定最低限、以下の設定を推奨
▌9.6以前はデフォルト値は“何もなし”だった
つまりメッセージしか出なかった。時刻すら不明…
10でようやく初期値が設定され、時刻とプロセスIDが最低限出るようになったlog_line_prefix = ‘ -> '%m [%p] ’
▌ローテーションの設定については以下の設定値でコントロールする
log_filename = ‘postgresql-%d.log‘ ⇒ %dを推奨。日付単位で生成、ひと月ごとに上書き
log_rotation_age / log_rotation_size ⇒ 切り替えの契機を時間とサイズで指定。ポリシーによる
log_line_prefix = '[%m, %d, %u, %p, %x]'
%m(日付時刻ミリ秒)%d(データベース名)%u(ユーザ名)%p(プロセスID)%x(トランザクションID)
© NEC Corporation 2018
19
NECのPostgreSQLサポートで検討/対処してきた課題
1. 本体側のバグを発見した場合の修正段取り
ソースレベルで調査した結果、本体のバグであると判明。修正対応はどうすべきか
2. 各バージョンのサポート期間の取り決め
毎年メジャーバージョンがあがっていくが、古いものはどこまでサポートすべきか
出たばかりのバージョンはいつからサポートするか
3. サポート対象とするPostgreSQLプロダクトの範囲
本体機能以外のEXTENSIONとなる部分や、外部コミュニティの周辺ツールまで含めると膨大な数になるがどこまでサポートすべきか
4. 商用RDBMSからの移行のご相談
相談を多く受けるが、どのようにサポートしていくか
© NEC Corporation 2018
20
1. バグを見つけた場合 コミュニティの修正段取り
▌バグを発見したらまずはコミュニティに報告 ⇒ [email protected]
詳細な原因がわからなくても、『ドキュメントの仕様と挙動が異なる』などでよい
▌コミュニティが確認し、修正イメージも定まればソースへのコミットが行われるソースコード内の該当箇所や、修正イメージもつけるとその通りにコミットされることも
▌修正後のソースを適用させるには、次期リビジョンを待つか自力でビルドリビジョンアップは3か月に一回定期的に行われる(2月、5月、8月、11月)
▌バグレポートは英語必須だが、コミットログに報告者の名前が載る!
↑修正イメージも提案し採用されると”fixed”もつく
© NEC Corporation 2018
21
1. バグを見つけた場合 NECではどうするか
報告後、コミュニティの修正を待つ。独自パッチは作成しない
▌報告からどれくらいで修正されるのか?
早ければ即日。すぐに原因がわかったり、修正イメージもつけていると早い
内容が改善要望に近かったり、修正影響が大きいなどの場合は修正見送りや、次期メジャーバージョンに持ち越されることも
▌報告しても修正が行われない場合はどうするか
独自パッチを作って欲しい、と言われることもあるが、NECではソースの該当箇所と修正イメージがわかっている場合でもパッチの作成と適用は実施しない
© NEC Corporation 2018
Ver 9.5 Ver 9.6
独自パッチは事実上のフォークとなってしまう Ver 9.5-nec
×何らかの齟齬が
生じうる
22
NECのバグ報告と修正適用事例
▌NECのサポートメンバがメモリリークのバグを報告PostgreSQL 9.1.9で発見し、9.1.10のリリースで他のメジャーバージョンと共に修正
▌PostgreSQLを組み込んだ自社製PKG製品の開発支援中に発見一部の評価結果に不審な点があり、デバッガで再現評価を重ねメモリリークであると断定
ソース上の修正箇所と修正イメージを策定(然るべき箇所でpfreeを実施させる)
▌コミュニティへの報告を実施([email protected]へメール)半日でコアチームメンバ(Tom Lane)が、報告した修正イメージ通りにコミットを実施
次期Verのリリースノートに報告者の名前が掲載された
https://www.postgresql.jp/document/9.3/html/release-9-1-10.html
© NEC Corporation 2018
23
2. 各バージョンのサポート期間について NECの場合
コミュニティの公式サポートは5年間で、そこから先は各社の裁量
▌開発コミュニティは5年間のサポートを表明している
5年目以降はリビジョンアップが行われなくなり、パッチの適用が望めなくなる
NECでは以降3年間はそのままサポート可能、リリースから8年間をサポート期間としている
▌新しいメジャーバージョンの利用はX.3あたりを推奨とし、サポート開始
11であれば11.3(5月を予定)から。リリースからすぐは、修正が多く入りやすいため
© NEC Corporation 2018
NECで継続サポート
5年間
NEC+コミュニティのサポート
3年間
コミュニティ正式リリース
NECサポート開始
コミュニティサポート終了
NECサポート終了
24
3. サポート対象の範囲 NECの場合
本体の開発コミュニティが提供する標準機能とAPIをサポート範囲に設定
© NEC Corporation 2018
PostgreSQL標準機能
postgresサーバ標準ツール
(psql、pg_dump 等)
外部API (※1)
JDBCドライバ
ODBCドライバ(psqlODBC)
contribパッケージ(pgcrypto、dblink等)
libpqライブラリ
ecpgプリコンパイラ
.NET Frameworkデータプロバイダ(Npgsql)
PHP PostgreSQL拡張モジュール
NECでは本体の標準機能と、一部のツールのみをサポート
pgpool-II PostGIS その他pgAdmin
pg_hint_plan pg_dbms_stats pg_statsinfo pg_bigm
その他の独自開発プロジェクトのツールは個別に相談を受けて対応
サポート対象外
個別に応相談
拡張版DB製品
クラウド/DBaaS
25
3. サポート対象の範囲 NECの場合
2018年度より、特に人気の4種類をサポートメニューに追加
© NEC Corporation 2018
PostgreSQL標準機能
postgresサーバ標準ツール
(psql、pg_dump 等)
外部API (※1)
JDBCドライバ
ODBCドライバ(psqlODBC)
contribパッケージ(pgcrypto、dblink等)
libpqライブラリ
ecpgプリコンパイラ
.NET Frameworkデータプロバイダ(Npgsql)
PHP PostgreSQL拡張モジュール
NECでは本体の標準機能と、一部のツールのみをサポート
pgpool-II PostGIS その他pgAdmin
pg_hint_plan pg_dbms_stats pg_statsinfo pg_bigm
その他の独自開発プロジェクトのツールは個別に相談を受けて対応
サポート対象外
個別に応相談
拡張版DB製品
クラウド/DBaaS
Enterprise Suppot(2018年提供開始)
で4種類まとめてサポート
26
特に引き合いの多かったツールを標準メニューに
周辺ツールでも特に相談/採用が多かったのが以下4種類
▌pg_hint_plan
PostgreSQLにヒント句にあたる機能を追加できる他DBからの移行時、元々使っていた場合に必要とされる
▌pg_dbms_stats
統計情報を固定化する。実行計画の急な変動を防ぎたいが、hint_planとヒント句を仕込むことが難しい場合にこちらで代替されるケースがある
▌pg_stats_info
統計情報を定期的にスナップショットで取得、保存し、変動を確認できる性能面の監視ツールとして、性能劣化の予兆を把握するために採用される
▌pg_bigm
日本語の全文検索が可能となる。全文検索が要件の場合必須に
© NEC Corporation 2018
27
4. 商用RDBMSからの移行のご相談
ライセンスの条件変更や、クラウド/SaaSの普及タイミングなどが重なりPostgreSQLへの移行/採用相談が急増
▌移行の相談を数多く受ける
導入中のDB全てというパターンまで検討
成功に導いたものも断念したものもあり、結果として断念の方が多数
▌達成できないケースの多くはコスト低減のみが目的の場合
多くのケースで移行コストがかさむ試算となり、そのまま使い続けた方が安い、となった
▌移行の目的設定と実施可否の見極めを重要視し、事前調査とアセスメントから支援するサポートを提供している
© NEC Corporation 2018
RDBMS PostgreSQL
¥
28
コスト低減のみが目的の場合の注意点
▌PostgreSQLでも保守費は必要
ライセンス費は不要だが、業務システムとして使う場合保守サポートとその分の費用はコストとして積む必要がある
▌思っているよりも移行コストはかかる
事前の調査/検討コスト、APの改修コスト、評価コスト、技術者育成コスト、etc…
移行元DB固有の関数やストアドプロシージャの利用が多い程、改修コストがかかる
© NEC Corporation 2018
商用ライセンスA PostgreSQL 商用ライセンスB
実際は…
移行コスト
トータルコストではより費用がかかる結果に!
商用ライセンスA PostgreSQL 商用ライセンスB
商用ライセンス費がA⇒Bとなるケース
5年間の運用費試算(保守込み)
29
移行支援でのトラブル事例
▌ストアドプロシージャも専用関数もなく、最も楽な移行ケースとして着手⇒が、移行後の評価で、特定の処理の実行結果が異なってしまう
▌調べていくと、レコードの見え方やトランザクションの挙動の違いなど複数の条件の違いでエラーになっていた
さらに、PostgreSQLはトランザクションの途中でエラーになるとロールバックしかできなくなる⇒詳細は次のスライドで解説
▌このような『細かな仕様差』が潜んでおりトラブルとなる
評価しなければわからない、気づけない場合が多いそのため移行にあたっては、全評価を推奨
© NEC Corporation 2018
30
トランザクションの挙動でPostgreSQLだとエラーになったケース
▌ idにユニーク制約のあるレコードに、2つのトランザクションが同時にDELETE⇒INSERTする場合の挙動を考える
© NEC Corporation 2018
TR-A
開始
DELETE id=1
INSERT (1,zzz)
COMMIT
再開
開始
DELETE id=1
COMMIT
開始
DELETE id=1
INSERT (1,zzz)
ROLLBACK
再開
<<ロック待ち>>
<<DELETE 1件>>
<<ロック待ち>>
<<DELETE 0件>>
<<DUPKEY>>
TR-B TR-A TR-B
トランザクションの再開時に、その時点のレコードの状態を参照できる。TR-AのINSERTが反映されたものを見れる
トランザクションの再開示に、中断された時点の状態で参照される。TR-AのINSERTは見えておらず、結果として重複キーエラーとなる
商用DB PostgreSQL
開始
DELETE id=1
INSERT (1,aaa)
COMMIT
この時点の状態を参照
INSERT (1,aaa)
この時点を参照できる
エラーが発生すると強制ロールバックに
3. ITベンダ視点で見たPostgreSQL
32
NEC案件で見た、PostgreSQLの対応領域
業種・OS・環境に依存することなく幅広く浸透している
© NEC Corporation 2018
医療
金融
流通
製造
通信
パブリックPostgreSQL
既にどの業種/業界でも使われており、向き/不向きも得意/不得意もないと言える
33
商用RDBMSと比較した場合の品質は
毎年のメジャーアップデートで機能も充実。十分遜色ないレベルに到達
▌VACUUMについても、小~中規模では恐れることはない
基本的にAUTO VACUUMに任せておける
一テーブルに大量のデータが入る設計だと、VACUUMの負荷が無視できなくなるので設計を考慮する
▌年一回のバージョンアップによる機能拡張は活発大規模/エンタープライズ向け機能が次々実装されている
パラレルクエリ(9.6から。まだまだこれからだが確実に進歩中)
パーティショニング(10と11で大幅に使い勝手が向上。商用レベルに)
▌高MC性が求められる場合や、高負荷なOLAP用途でのDBとして用いる場合は商用RDBMSの上位Editionに軍配があがる
© NEC Corporation 2018
34
ITベンダとして見たPostgreSQLの評価
© NEC Corporation 2018
商用利用しやすいOSSライセンス
技術・ナレッジが成熟化してきている(技術者の増加)
安定性・性能・運用性は十分に強化されている
業種/領域を選ばず、幅広い分野で実績が積みあがっている
35
最近のトレンドはクラウドでの活用
商用DBのライセンス体系変更と、クラウド/SaaS人気のダブル追い風
▌仮想基盤で使うならまずPostgreSQLに
仮想基盤で検討されるDBの第一候補となり、クラウド、SaaSの普及と合致し特需の状態
▌PaaS型のPostgreSQL基盤が人気
オンプレならではの苦労を省ける
気を遣うHA構成、バックアップリカバリを安心して任せられる
▌サポートベンダとしてPaaSへのサポートも検討中
© NEC Corporation 2018
AzureAWS
4. NECのソリューションの紹介
37
PostgreSQLサポートサービス
DB移行や新規構築など、導入前のご相談はOSSプロフェッショナルサポートを、導入後の運用保守はPostgreSQL保守サポートをご利用下さい
▌OSSプロフェッショナルサポートサービス
お客様の要望に応じて、導入前~導入までの設計、構築など幅広く支援可能
プロジェクト毎に見積もり、個別対応で支援
▌PostgreSQL保守サポートサービス
PostgreSQL導入後の運用を支援
他のソフトウェア製品サポートと同様に、PPサポートサービス、PPサポートパックとして定額メニューでサービスを提供
© NEC Corporation 2018
システム導入前 ~ 導入
事前検証システム設計
システムチューニン
グ
システム構築/評価
OSSプロフェッショナルサービス構築サービス
PostgreSQL保守サポートサービス
作業フェーズ
NECが提供するサービス
システム導入後
運用支援
ご要望に応じて個別対応
サーバ台数に応じた固定価格
38
他DBからの移行におけるプロフェッショナルサポートの場合
© NEC Corporation 2018
例としてOracleからPostgreSQLへの移行を実施するPJの場合、プロフェッショナルサポートでは以下のような作業内容で支援いたします
PJフェーズと支援概要 NECサポート支援内容 PJメンバ実施作業
移行準備期間(レクチャーと現行環境ヒアリング)
PostgreSQLの概要と、Oracleからの移行ポイントを解説(直接打ち合わせ)
Oracle利用状況ヒアリング、検討ポイントの策定
PJメンバ/エンジニアの打ち合わせ対応
現行システムのOracle利用状況など、ヒアリングに対して調査/回答
移行実施期間(バックエンド問い合わせ対応)
メールベースによる問い合わせ対応(課題管理表のやりとりなど)
電話会議または対面による打ち合わせ(月1~2回など)
APの調査/改修(ソースコード/SQL)
PostgerSQL運用手順の策定(HA構成やバックアップなど)
バックエンドによる支援が前提で、システムの中身を見ての調査や課題点の発見はPJ側に実施頂き、発見された課題に対する対応策の調査/策定を支援いたします
39
PostgreSQLで透過的暗号化機能を実現
▌Transparent Data Encryption for PostgreSQL
PostgreSQLに透過的暗号化機能を付与する製品です
2015年にOSSとして公開し、NECによるサポートと付加機能をセットにした有償版を別途展開しています
2018年にV1.2をリリースし、暗号化機能の強化と動作環境の拡充を実施しました
© NEC Corporation 2018
管理者
暗号化
復号
データベース内データの漏えいを
防止
A123日電太郎
解読不可
暗号化列をテーブル定義で簡単指定
利用者
暗号鍵を用いた接続後は従来通りの
運用が可能
Transparent Data Encryption for PostgreSQL
PostgreSQL
40
無償のOSS版と商用版から選択が可能
▌基本的な機能が利用可能なFree Editionと、強化された暗号化機能に保守サポートを含むEnterprise Editionを展開しています
▌Enterprise Editionはサブスクリプションライセンス(1年更新)での提供となります
© NEC Corporation 2018
• GPLライセンスで利用可能
• 2種類のデータ型を暗号化可能(TEXT、BYTEA)
• GitHubで公開中
• 商用版へのアップグレードが可能
Free Edition
(OSS版)
• PostgreSQL本体も含めた保守サポートを提供
• 暗号化データ型を追加(NUMERIC,TIMESTAMP,INTEGER)
• 複数バージョンの暗号鍵に対応
• AWS KMSを利用した鍵管理(Linux版のみ)
• アプリケーション改修が不要な簡易動作モードを選択可能
Enterprise
Edition
(商用版)の強化項目
41
各ソリューションの関連Webページ
▌PostgreSQLサポートサービスhttps://jpn.nec.com/oss/middle_support/postgresql/index.html
▌Transparent Data Encryption for PostgreSQL Free Editionhttps://github.com/nec-postgres/tdeforpg/
▌Transparent Data Encryption for PostgreSQL Enterprise Editionhttps://jpn.nec.com/tdeforpg/index.html
© NEC Corporation 2018
5. まとめ
43
まとめ
今こそPostgreSQLの時代です。共に盛り上げ磨いていきましょう
▌ビジネスとしての関わり方は色々ありますが、何よりライセンス的に商用利用が簡単です
▌コミュニティへの関わり方も色々ありますまずはノウハウ習得も兼ねてユーザコミュニティや勉強会からお気軽に
▌DBとし成熟し、確実にシェアは伸びつつあります今後はクラウドでの導入活用がますます進むと思います
© NEC Corporation 2018