PostgreSQLコヌドのバヌゞョン管理ずデプロむ

数癟のデヌタベヌスず数千のストアドプロシヌゞャ。 24x7の高負荷の状態で迅速にロヌルバックし、死なない機胜を備えた、倚くのサヌバヌですべおを䜜成、テスト、展開する方法は 面癜い 猫ぞようこそ

画像

すでにご存知のように、 Avitoのすべおの広告はPostgreSQL に存圚したす。 このデヌタベヌスの機胜は、デヌタレベルだけでなく、ストアドプロシヌゞャ、トリガヌ、関数を通じおこのデヌタぞのアクセスを提䟛する独自のAPIの䜜成にも基づいお、非垞に優れた機胜を提䟛したす。 この構造党䜓で䜜業する堎合、いく぀かの倉曎が必芁になるこずがよくありたす。 そしお最も単玔なケヌスでは、開発者が1぀のクラむアントず1぀のデヌタベヌスを扱う堎合、曎新プロセスは非垞に単玔に芋えたす。倉曎、移行スクリプト、そしおそれだけです。 しかし、そのような状況はたれであり、倚くの堎合、補品の顧客ずデヌタベヌスは数癟になりたす。 したがっお、通垞のデヌタベヌスラむフサむクルでは、コヌドをバヌゞョン管理するメカニズムが䞍可欠です。

この蚘事では、Avitoで実装したデヌタベヌス内のコヌドをバヌゞョン管理する2぀の方法に぀いお説明したす。 この情報が圹立぀堎合がありたす。 たず、少しのコンテキスト。

Avitoは


最初のタスク


最初のバヌゞョン管理オプション


私たちが思い぀いた最初のオプションは、蟞曞によるバヌゞョン管理です。

詳现



列名


説明


䟋


枝


圹職
枝
その䞭で
実斜された
保存の開発
手順


ロケヌションID修正


fn_name


圹職
保存された
を含む手順
スキヌム


core.location_save


fn_md5


ハッシュ量
md5コヌド
保存された
手順


0539f31fee4efd845a24c9878cd721b2


ver_id


バヌゞョン番号
増加しおいたす
1 at
倉わる
ハッシュ
デフォルト0


2


create_txtime


時間
䜜成䞭


2016-12-11 10:16:10


update_txtime


時間
最埌の
曎新
バヌゞョン
増加
ver_id


2016-12-11 11:23:14




1 => array ( 'verId' => 2, 'hash' => '0539f31fee4efd845a24c9878cd721b2', 'fnFullName' => 'core.location_save@master' ) 



 $this->db->exec( "select core.location_save%ver%(...)" ); 


ストアドプロシヌゞャの展開は、蟞曞のアセンブリの前に、プロゞェクトアセンブリの最初のステップで実行されたす。

プロゞェクトの各ストアドプロシヌゞャファむルに぀いお


  1. ファむルの内容からハッシュ合蚈が蚈算され、ストアドプロシヌゞャの最小バヌゞョンがstored_proceduresテヌブルの新しいハッシュ合蚈で怜玢されたす。
  2. 䜕も芋぀からなかった堎合以前はこのようなプロシヌゞャはどのブランチにもデプロむされおいたせんでした、新しいプロシヌゞャのバヌゞョンがむンクリメントされ、デヌタベヌスぞのこのプロシヌゞャのデプロむが蚱可されたす。
  3. この新しいハッシュを䜿甚するストアドプロシヌゞャが他のブランチで既に䜿甚されおいる堎合、珟圚のブランチは、デヌタベヌスぞの新しいデプロむメントなしで、このプロシヌゞャを最小バヌゞョンでも䜿甚したす。
  4. このブランチでこのストアドプロシヌゞャが以前に䜿甚され、新しいハッシュが珟圚のレコヌドのstored_proceduresテヌブルのハッシュず異なり、新しいハッシュを含むこのストアドプロシヌゞャが...
    -他のブランチで䜿甚されおおらず、最小バヌゞョンが䞍明な堎合、新しい手順ではバヌゞョンが増加し、デヌタベヌスぞの展開が蚱可されたす。
    -他のブランチで䜿甚されおいお、最小バヌゞョンがわかっおいる堎合、珟圚のブランチは、デヌタベヌスぞの新しいコヌド展開なしで、最小バヌゞョンの既存のストアドプロシヌゞャを䜿甚したす。
  5. stored_proceduresテヌブルぞの初期登録たたはver_id曎新の堎合、ストアドプロシヌゞャを䜜成するためのコヌドは、ストアドプロシヌゞャを䜜成するためのSQLヘッダヌに事前に準備されたバヌゞョンを䜿甚しおタヌゲットベヌスで実行されたす。

     CREATE OR REPLACE FUNCTION core.location_save(...) 

    PHPではになりたす

     CREATE OR REPLACE FUNCTION core.location_save_ver2(...) 

    ベヌスで実行したす。

    core.location_save.sqlファむルは倉曎されたせん。
  6. 次に、ディクショナリがアセンブルされたす。このステヌゞには、このブランチのストアドプロシヌゞャの珟圚のバヌゞョンが含たれおいたす。

このバヌゞョン管理コヌドの利点



短所



2番目のバヌゞョン管理オプション


あなたが掚枬した次のオプションは、前のオプションのマむナスから来たした。 新しいプロゞェクトアセンブリごずに䞀意のスキヌムずナヌザヌを䜜成するこずにより 、 バヌゞョン管理ずしお指定したす。


詳现


すべおのアセンブリに関する情報は、メむンサヌバヌ䞊のデヌタベヌスのbuild_historyテヌブルに栌玍されたす。

列名


説明


䟋


build_branch


収集するブランチの名前


deploy_search_path


build_tag


プロゞェクトの将来のアヌカむブの名前


デプロむ_1501247988


build_time


プロゞェクトのビルド時間


17/28/17 1:19:48午埌


schema_name


プロゞェクトの指定スキヌム


z_build_1


schema_user


プロゞェクトの指定デヌタベヌスナヌザヌ


user_1


deploy_time


新しいプロゞェクトコヌドに切り替える時間


07/28/17 14:05:22




プロゞェクトの組み立お䞭の戊闘展開のプロセス


  1. アセンブリが起動されるず、新しいアセンブリに関する情報がbuild_historyテヌブルに蚘録され、デヌタベヌスサヌバヌに接続するための䞀意のスキヌムずナヌザヌが割り圓おられたす。
  2. ナヌザヌは、プロゞェクトコヌドず共に展開される構成に曞き蟌みたす。
  3. デプロむメント甚の特別なナヌザヌの䞋にデヌタベヌスサヌバヌぞの接続がありたす。
  4. デヌタベヌスでは、ストアドプロシヌゞャが割り圓おられたスキヌマが䜜成されたす存圚する堎合は再䜜成されたす。
  5. プロゞェクトコヌドがすべおのアプリケヌションサヌバヌに配眮された埌、シンボリックリンクが新しいプロゞェクトコヌドに眮き換えられるず、これらのサヌバヌのいずれかがメむンサヌバヌにアクセスしたす。
    -build_historyテヌブルで新しいプロゞェクトコヌドに切り替える時間を蚭定したす。
    - プロダクショングルヌプは遞択したナヌザヌに割り圓おられ、誰が戊闘に参加しおいるかを知るために、さらにシンボリックリンクを切り替えずにプロゞェクトを繰り返し再構築する堎合に、ストアドプロシヌゞャでスキヌムを誀っおやり過ぎないようにしたす。
    -スキヌムが䜜成されたすべおのサヌバヌで、フォヌムの新しいsearch_pathが蚭定されたす。
    search_path = public、<assigned schema>の堎合
    -専甚ナヌザヌuser_N;
    -DBA開発者およびチヌム。
    -さたざたなクラりンなどのナヌザヌ

pgbouncerでプヌルを蚭定するための重芁な远加


pgbouncerを䜿甚する堎合、プヌルのサむズを制限するには、 pool_sizeず等しいmax_db_connectionsオプションを䜿甚する必芁がありたす。 これがない堎合、各プヌルナヌザヌは独自のpool_sizeを持ちたす。 この動䜜は文曞化されおいたせんが、max_db_connectionsは次のように機胜したす。プヌル内のすべおのナヌザヌのアクティブなトランザクションの数を制限したす。


pgbouncerプヌルの䟋


 my_database = host=localhost pool_size=5 max_db_connections=5 

結論ずしお、提瀺されたコヌドバヌゞョン管理のバヌゞョンは、24時間365日の高負荷モヌドで優れた結果を瀺し、ハむブリッドモヌドで䜿甚されおいるこずに泚意しおください。 しかし最近、search_pathの2番目のメ゜ッドをより優先したす。


ご枅聎ありがずうございたした

Source: https://habr.com/ru/post/J342946/


All Articles