Chef 11 Serverの新機能: Partial Search #opschef_ja
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
Chef 11 Serverの新機能としてPartial Searchがあります。これはChef Serverから必要な情報のみを検索結果として取得するもので、Chef ServerとChef Client間の通信量の縮小、Chef Clientのメモリ消費量の縮小に大きな効果があります。
通常の Search
例えば、以下のようにホスト名がcsで始まるノードを検索し、ホスト名を取得したいとします。
puts '----- normal search -----'
nodes = search( :node, 'hostname:cs*' )
pp Marshal.dump( nodes[ 0 ] )
nodes.each do |n|
puts '%15s: %d bytes' % [ n[ 'hostname' ], Marshal.dump( n ).size ]
end
この場合、ホスト名だけを得たいのに、検索結果はノードのAttributeすべてを含んだノードオブジェクトのため、データ量が大変大きくなってしまいます。
----- normal search ----- "\x04\bo:\x0FChef::Node\n:\n@nameI\"\x17cs3-nfs.example.jp\x06:\x06ET:\x16@chef_environmentI\"\x12cloudstack-30\x06;\aT:\x0E@run_listo:\x12Chef::RunList\x06:\x14@run_list_items[\x06o:\x1FChef::RunList::RunListItem\b:\r@version0:\n@type:\vrecipe;\x06I\"\x14cloudstack::nfs\x06;\aT:\x10@attributesIC:\x1AChef::Node::Attribute{\x00\x13:\x18@set_unless_presentF:\x17@merged_attributes0:\x16@combined_defa : (中略) : T7700 @ 2.40GHz\x06;\aTI\"\x0Evendor_id\x06;\aTI\"\x11GenuineIntel\x06;\aT\x06;\x19@\f\x06;\x19@\fI\"\fcommand\x06;\aTIC;\x17{\x06I\"\aps\x06;\aTI\"\vps -ef\x06;\aT\x06;\x19@\fI\"\x15idletime_seconds\x06;\aTigI\"\tfqdn\x06;\aTI\"\x17cs3-nfs.example.jp\x06;\aTI\"\tkeys\x06;\aTIC;\x17{\x06I\"\bssh\x06;\aTIC;\x17{\x00\x06;\x19@\f\x06;\x19@\f\x06;\x19@\f:\x0F@run_state{\x00" cs3-nfs: 39539 bytes cs3-host: 41287 bytes cs4-host: 53375 bytes cs4-manager: 41269 bytes cs4-nfs: 39546 bytes cs3-manager: 40319 bytes
Partial Search
そこで、Partial Searchを使います。通常のSearchと異なり、取得したいAttributeをkeysとして指定できます。
なお、Partial Searchを利用するには、partial_search Cookbookの依存関係をmetadata.rbに設定しておく必要があります。
depends 'partial_search'
puts '----- partial search -----'
nodes = partial_search( :node, 'hostname:cs*', :keys => { 'hostname' => [ 'hostname' ] } )
pp Marshal.dump( nodes[ 0 ] )
nodes.each do |n|
puts '%15s: %d bytes' % [ n[ 'hostname' ], Marshal.dump( n ).size ]
end
この場合、検索結果はノードのAttributeすべてを含んだノードオブジェクトではなく、指定したAttributeの値のみが得られるため、データ量をかなり小さくできました。
----- partial search ----- "\x04\b{\x06I\"\rhostname\x06:\x06ETI\"\fcs3-nfs\x06;\x00T" cs3-nfs: 34 bytes cs3-host: 35 bytes cs4-host: 35 bytes cs4-manager: 38 bytes cs4-nfs: 34 bytes cs3-manager: 38 bytes
大量のノードやSearchを使う場合、Partial Searchは必須と思われます。Chef 11 Serverにはこの他にも多数のパフォーマンス向上のための改良が施されているため、是非 Chef 11 Serverへの移行とCookbookのPartial Search対応を検討してください。