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"
?>
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config
<
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
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 件のコメント:
コメントを投稿