https://blogs.oracle.com/OracleCoherence/entry/getting_started_with_the_coherence
[訳注]正しくはAdapterですが、原文のタイトルのままAdaptorを使っています。
Overview
Coherence 12c (12.1.3) でMemcachedクライアントのサポートが追加され、直接CoherenceクラスタにBinary Memcachedプロトコルでデータを格納できるようになりました。このエントリではCoherence Memcached Adapterの設定方法を紹介するとともに、MemcachedクライアントがどのようにCoherenceクラスタへ接続することができるのかを紹介するため、シンプルなPHPのサンプルを用意しました。Memcached Adapterはプロキシサービスとして構成し、そのプロキシサービスをCoherenceクラスタで実行します。以下はサンプルのCache構成です。
いくつか注意点を。<?xml version="1.0"?> <cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config http://xmlns.oracle.com/coherence/coherence-cache-config/1.2/coherence-cache-config.xsd"> <defaults> <serializer>pof</serializer> </defaults> <caching-scheme-mapping> <cache-mapping> <cache-name>memcache</cache-name> <scheme-name>DistributedCacheScheme</scheme-name> </cache-mapping> </caching-scheme-mapping> <caching-schemes> <distributed-scheme> <scheme-name>DistributedCacheScheme</scheme-name> <service-name>DistributedCacheService</service-name> <backing-map-scheme> <local-scheme/> </backing-map-scheme> <autostart>true</autostart> </distributed-scheme> <proxy-scheme> <service-name>MemecachdTcpCacheService</service-name> <acceptor-config> <memcached-acceptor> <cache-name>memcache</cache-name> <memcached-auth-method>plain</memcached-auth-method> <address-provider>memcached-addr-provider</address-provider> </memcached-acceptor> </acceptor-config> <autostart>true</autostart> </proxy-scheme> </caching-schemes> </cache-config>
<memcached-acceptor>以下の<cache-name>要素は、Memcached acceptorのための分散キャッシュを定義しています。このacceptorに接続するすべてのMemcachedクライアントはこのキャッシュにアクセスします。
必要であれば、<memcached-auth-method>を設定し、クライアント認証を有効にすることができます。現時点ではSASL (Simple Authentication and Security Layer)プレーン認証のみをサポートしています。
<address-provider>要素ではMemcached Adapterが接続を待ち受けるソケットアドレスを定義します。Coherenceのオペレーション構成ファイルで定義します。
以下はaddress-providerの設定を紹介するオペレーション構成ファイルの例です。
memcached-addr-providerというidを持つアドレスプロバイダはsocket-addressの参照を定義しています。<?xml version='1.0'?> <coherence xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config http://xmlns.oracle.com/coherence/coherence-operational-config/1.2/coherence-operational-config.xsd"> <cluster-config> <address-providers> <address-provider id="memcached-addr-provider"> <socket-address> <address>127.0.0.1</address> <port>11211</port> </socket-address> </address-provider> </address-providers> </cluster-config> <logging-config> <destination system-property="tangosol.coherence.log">stdout</destination> <severity-level system-property="tangosol.coherence.log.level">9</severity-level> </logging-config> <security-config> <identity-asserter> <class-name>memcached.PasswordIdentityAsserter</class-name> </identity-asserter> </security-config> </coherence>
Authentication
認証のため、カスタムIdentityAsserterを実装でき、そのIdentityAsserterをオペレーション構成ファイルで宣言できます。上記オペレーション構成ファイルのサンプルから、関連する部分だけ抜き出してみます。
Memcached AdapterはIdentityAsserterの実装を呼び出し、トークンとしてcom.tangosol.net.security.UsernameAndPasswordオブジェクトを渡します。… <security-config> <identity-asserter> <class-name>memcached.PasswordIdentityAsserter</class-name> </identity-asserter> </security-config> …
以下はIdentityAsserterのサンプルです。
package memcached; import com.tangosol.net.Service; import com.tangosol.net.security.IdentityAsserter; import com.tangosol.net.security.UsernameAndPassword; import javax.security.auth.Subject; public class PasswordIdentityAsserter implements IdentityAsserter { public Subject assertIdentity(Object oToken, Service service) throws SecurityException { if (oToken instanceof UsernameAndPassword) { UsernameAndPassword secToken = (UsernameAndPassword) oToken; String sPwd = new String(secToken.getPassword()); if (secToken.getUsername().equals("username") && sPwd.equals("password")) { return new Subject(); } } throw new SecurityException("Access denied"); } }
PHP Memcached client
PHPのmemcachedクライアントであるMemcacheとMemcachedは非常に人気があります。Memcachedはより新しいもので、Binary MemcachedプロトコルとSASL認証を両方ともサポートしています。MemcachedとSASLを有効にするためには、以下の設定をphp.iniファイルに設定する必要があります。
次のPHPコードはPHP Memcachedクライアントライブラリを使ってCoherenceクラスタに接続し、エントリを追加し、エントリを再度読み出しています。extension=memcached.so memcached.use_sasl = 1
<?php $m = new Memcached(); $m->setOption(Memcached::OPT_BINARY_PROTOCOL, true); $m->setSaslAuthData("username", "password"); if (!count($m->getServerList())) { // List of Coherence proxy service nodes $m->addServer('127.0.0.1', 11211); } print_r($m->getVersion()); $m->set('test', 'test_string'); print_r('Cache value: ' . $m->get('test')); ?>
Putting it all together
これは簡単に試すことができます。まずはCoherence、PHP、PHP Memcachedクライアントライブラリをダウンロードしてインストールしましょう。続いて、テスト用ディレクトリに、先ほど説明したtangosol-coherence-override.xmlという名前のオペレーション構成ファイルを作成します。同様に、Memcachedクライアントのためのキャッシュ構成を指定するcoherence-cache-config.xmlという名前のキャッシュ構成ファイルを作成します。最後に、テスト用ディレクトリにmemcachedというディレクトリを作成し、先ほどのコードを含むPasswordIdentityAsserter.javaというファイルを作成します。
PHPで、先ほどのPHPのサンプルコードをtest.phpとして保存しましょう。これでテストの準備は完了しました。
Coherenceを立ち上げるために、Coherenceライブラリを参照する必要があります。簡単のために、Coherenceのインストールディレクトリを環境変数COH_HOMEと定義しましょう。以下ではLinuxやOS X環境を想定していますが、Windowsでも同様です。
テストディレクトリ内で以下のコマンドを実行し、PasswordIdentityAsserterをビルドします。
それでは、Coherenceキャッシュサーバを起動し、Memcachedクライアントのデータを保存します。javac –cp $COH_HOME/lib/coherence.jar memcached/PasswordIdentityAsserter.java
最後に、PHPクライアントがCoherence Memcached Adapterを使って安全に接続、データの格納および読み出しができることを確認しましょう。java -cp .:$COH_HOME/lib/coherence.jar com.tangosol.net.DefaultCacheServer
出力結果は以下のようになるはずです。php test.php
PHPクライアントがCoherenceにインサートした値であるtest_stringの読み出しに成功したことを示しています。Array ( [127.0.0.1:11211] => 12.1.3 ) Cache value: test_string
0 件のコメント:
コメントを投稿