fbpx

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対応を検討してください。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA