Rumah >pembangunan bahagian belakang >tutorial php >PHP Master | Amazon DynamoDB: Simpan Sesi PHP dengan Pengimbang Beban
Artikel ini dikongsi dari salah satu laman kakak kami, Cloudspring. Jika anda dapat membantu, pastikan anda memberi mereka lawatan!
Tutorial ini akan menunjukkan kepada anda cara menggunakan Amazon DynamoDB sebagai kemudahan penyimpanan untuk sesi PHP. Kaedah ini menjadi sangat berguna apabila aplikasi anda memanfaatkan perkhidmatan mengimbangi beban elastik dan autoscaling. Anda akan memerlukan akaun Amazon AWS yang membolehkan menggunakan EC2, Balancer Load Elastic dan DynamoDB sebagai prasyarat untuk bermain di sepanjang tutorial.
Aplikasi ini meminta pengguna untuk memilih nama pengguna yang disimpan ke dalam sesi semasa dan bertindak sebagai "log masuk". Sekiranya nama pengguna hadir dalam sesi, aplikasi membolehkan pengguna memasukkan sejenis "profil", pada dasarnya satu siri maklumat kunci/nilai seperti nama, nama belakang, e -mel dan lain -lain (kedua -dua kunci dan nilai adalah rentetan). Semua logik ini dimasukkan ke dalam fail index.php.
Sesi.php
Fail mengandungi perpustakaan sesi mudah. Perpustakaan ini membolehkan kami menguruskan data sesi dengan kaedah yang mesra seperti $ sesi-> baca ('some_var') dan $ sesi-> tulis ('some_key', 'some_value'). Objek sesi ini boleh dikonfigurasikan untuk menggunakan mekanisme sesi php lalai (jika kami adalah pelayan ujian tempatan) atau kelas tersuai. Langkah pertama fail permohonan kami ialah permulaan sesi:
<span>require_once 'lib/session.php';
</span><span>try {
</span> <span>// Engine can be PHP or AmazonDynamoDB
</span> <span>$session = new Session($config['session']['engine'], $config['session']['params']);
</span><span>} catch (Exception $e) {
</span> <span>exit($e->getMessage());
</span><span>} // end try</span>
Nilai enjin lalai adalah PHP yang tidak memerlukan parameter. Jika kami memilih enjin 'AmazondynamoDB', pembina sesi akan melaksanakan beberapa kod tambahan:
<span>switch ($engine) {
</span><span>case 'AmazonDynamoDB':
</span><span>// Load AWS SDK
</span><span>require_once 'AWSSDKforPHP/sdk.class.php';
</span><span>// Create a list of credential sets that can be used with the SDK.
</span><span>CFCredentials<span>::</span>set($params['credentials']);
</span><span>// Instantiate a DynamoDB client
</span><span>$dynamodb = new AmazonDynamoDB();
</span><span>$dynamodb->set_region($params['region']);
</span><span>// Instantiate, configure, and register the session handler
</span><span>$this->handler = $dynamodb->register_session_handler(array(
</span><span>'table_name' => $params['table_name'],
</span><span>'lifetime' => $params['lifetime'],
</span><span>));
</span><span>break;</span>
Mula -mula kita memuatkan AWS SDK yang mesti dipasang dan dapat dicapai, maka kelayakan kami dimuatkan ke dalam persekitaran AWS. Dari titik ini kita boleh menggunakan kelas AWS, jadi contoh baru AmazondynamoDB dicipta dan persediaan dengan rantau yang betul di mana jadual kami berada. Akhirnya kami memberitahu objek DynamoDB kami untuk mendaftarkan dirinya sebagai Pengurus Sesi yang melewati nama jadual untuk digunakan, dan itulah yang kami perlukan.
Fail config.php adalah di mana kami memberitahu aplikasi enjin yang kami mahu gunakan, juga kelayakan AWS dan tetapan DynamoDB disimpan di sini. Dalam index.php saya juga menyertakan sedikit fungsi utiliti yang, jika kita tidak berada di pelayan setempat, mengambil nama contoh yang sedang berjalan. Ini berguna untuk memeriksa bahawa sesi disimpan konsisten di seluruh pelayan kami.
<span>function getServerName() {
</span> <span>$host = $_SERVER['SERVER_NAME'];
</span> <span>if ('localhost' != $host) {
</span> <span>// Maybe we are on EC2, trying to catch the current instance ID
</span> <span>$ch = curl_init('http://169.254.169.254/latest/meta-data/instance-id');
</span> <span>curl_setopt($ch, CURLOPT_FAILONERROR, true);
</span> <span>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</span> <span>curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
</span> <span>if ($ret = curl_exec($ch)) {
</span> <span>$host .= ' (instance ' . $ret . ')';
</span> <span>} // end if
</span> <span>curl_close($ch);
</span> <span>} // end if
</span> <span>return $host;
</span><span>} // end function</span>
Fungsi GetServername () menggunakan API Metadata EC2 untuk mencari nama contoh.
Jalankan aplikasi di armada anda
Untuk menguji aplikasi ini, kami memerlukan armada sekurang -kurangnya dua pelayan web di belakang pengimbang beban. Pelayan yang saya gunakan adalah contoh Ubuntu GNU/Linux yang dilengkapi dengan:
Jika anda tahu bagaimana untuk membina AMI, anda boleh membina anda dari awal. Tetapi anda juga boleh menggunakan yang telah saya sediakan dan dibuat awam: AMI-4B42443F. Mesin ini sudah mengandungi kod sumber PHP untuk aplikasi dan semua kebergantungan yang lain. Sebaik sahaja anda mempunyai AMI anda siap ... mari kita pergi!
Mulakan penyimpanan sesi
Pergi ke konsol AWS anda, pilih Perkhidmatan DynamoDB dan rantau kegemaran anda (lombong adalah EU West - Ireland). Klik pada butang "Buat Jadual".
Masukkan "test_sessions" sebagai nama jadual dan pilih kunci utama rentetan yang dipanggil "id", jenis utama mestilah "hash". Jika anda memilih nama lain, ia mesti disalin dalam fail config.php kemudian. Masukkan "10" untuk kedua -dua medan Unit Baca dan Tulis Kapasiti (contohnya, seberapa cepat jadual anda), ini sudah cukup untuk diuji.
Sekarang anda mempunyai jadual NoSQL di mana setiap baris mempunyai medan ID mandatori tetapi boleh mempunyai bilangan pembolehubah medan lain yang berlainan jenis rentetan, nombor, set rentetan atau set nombor. Objek Pengurus Sesi akan menggunakan medan rentetan yang dinamakan "Data" untuk menyimpan pembolehubah sesi dan medan nombor yang dinamakan "tamat" untuk timestamp tamat tempoh sesi.
Pelancaran dan konfigurasikan pelayan
Sekarang pilih perkhidmatan EC2 dan rantau yang sama yang anda pilih untuk jadual DynamoDB. Klik pada butang "Pelancaran Instance" dari sama ada papan pemuka atau bahagian "Contoh". Pilih AMI adat anda atau, dengan Wizard Klasik, pergi ke tab "Komuniti AMIS" dan masukkan "AMI -4B42443F".
Dalam skrin seterusnya masukkan sekurang -kurangnya "2" untuk bilangan contoh dan pilih jenis contoh anda, saya memilih Micro (T1.Micro). Anda boleh meninggalkan "tiada keutamaan" dalam dropdown zon ketersediaan, tetapi dalam persekitaran pengeluaran lebih baik jika pelbagai contoh diedarkan di antara dua atau lebih zon di dalam rantau yang sama. Terima tetapan lalai untuk kedua -dua "butiran contoh" dan panel konfigurasi "peranti penyimpanan", kemudian teruskan. Masukkan satu atau lebih tag pilihan jika anda mahu. Pilih papan kekunci atau buat yang baru
dan pilih kumpulan keselamatan yang membolehkan sekurang -kurangnya HTTP pada port 80 dan SSH pada port 22.
Semak tetapan anda kemudian lancarkan contoh. Apabila keadaan menyatakan "berjalan", mereka boleh dikonfigurasi melalui SSH. Setiap contoh mempunyai nama DNS awam yang serupa dengan EC2-xxx-xxx-xx-xx.region.compute.amazonaws.com. Anda perlu mengedit fail config.php pada setiap contoh yang anda buat. Sambungkan ke contoh dengan SSH atau dengan pelanggan SFTP menggunakan kunci awam anda dan nama pengguna "Ubuntu" (jika anda menggunakan ami awam saya):
$ ssh -i /path/to/key.pem ubuntu@ec2-x-x-x-x.region.compute.amazonaws.com
Tukar direktori semasa ke /var /www di mana aplikasi ujian terletak. Edit fail config.php yang memasukkan kunci dan rahsia AWS anda. Kemudian periksa sama ada tetapan jadual DynamoDB anda, anda pasti perlu mengedit rantau ini dengan nilai yang sesuai yang boleh didapati dalam rujukan ini.
Kemudian buat fail kosong yang dipanggil ping.html di dalam /var /www: Fail ini akan digunakan oleh pengimbang beban untuk menguji kebolehlaksanaan setiap contoh.
menyediakan pengimbang beban
Dalam panel cek kesihatan masukkan /ping.html dalam medan Ping Path dan biarkan tetapan lain sebagai lalai. Ini bermakna: panggil sumber /ping.html setiap contoh setiap 30 saat, jika masa tindak balas lebih lama maka 5 saat cek gagal, jika contoh gagal dua pemeriksaan kesihatan berturut -turut, ia tidak sihat, jika ia melewati 10 cek berturut -turut sihat. Pengimbang beban tidak akan mengemukakan lalu lintas ke contoh yang tidak sihat dan jika Autoscale berada di tempat kejadian yang tidak sihat dapat ditamatkan dan digantikan oleh yang baru.
Skrin seterusnya membolehkan anda memilih mana yang sedang berjalan yang sedang berjalan boleh ditambah ke pengimbang beban. Pilih dua contoh yang dibuat sebelum ini dan teruskan. Semak konfigurasi akhir dan sahkan jika ia baik untuk anda. Sekarang, anda sepatutnya dapat melihat butiran pengimbang beban dan status semua contoh yang berkaitan.
Setiap kali anda menghantar borang atau menyegarkan halaman yang anda minta boleh diproses dengan contoh yang berbeza. Anda boleh menyemak contoh mana yang melayani anda dengan nama yang dipaparkan melalui utiliti GetServerName ().
Ringkasan
Dan itu semua buat masa ini. Kami telah merangkumi topik penting dalam ekosistem AWS, tetapi ini hanya permulaan. Semua perkara ini boleh diprogramkan sepenuhnya, sebagai contoh: anda boleh menambah autoscaling dan merancang contoh anda untuk dikonfigurasi sendiri dan memuat turun kelayakan AWS dan data lain dari tempat yang dipercayai. Atau anda boleh menggunakan pembentukan awan untuk membuat templat yang boleh diguna semula untuk keseluruhan infrastruktur.
Titik permulaan untuk memeriksa adalah laman utama AWS. Dan sekarang jika anda selesai ujian jangan lupa untuk menamatkan semua barangan anda, jika tidak gembira pengekodan!
imej melalui Fotolia
Soalan Lazim (Soalan Lazim) pada Sesi Amazon DynamoDB dan PHP
Bagaimanakah saya dapat melaksanakan pengimbangan beban dengan sesi Amazon DynamoDB dan PHP? Dengan Sesi Amazon DynamoDB dan PHP, anda boleh mencapai ini dengan menggunakan perkhidmatan elastik elastik Amazon (ELB). ELB secara automatik mengedarkan trafik aplikasi masuk ke pelbagai sasaran, seperti contoh Amazon EC2, bekas, dan alamat IP. Ia boleh mengendalikan beban pelbagai trafik aplikasi anda di zon ketersediaan tunggal atau merentasi zon ketersediaan berganda. Untuk sesi PHP. Ia memberikan prestasi yang cepat dan boleh diramal dengan skalabilitas lancar. Anda boleh skala jadual anda ke atas atau ke bawah untuk menyesuaikan diri dengan trafik, tanpa sebarang downtime atau degradasi prestasi. DynamoDB juga menawarkan keselamatan terbina dalam, sandaran dan pemulihan, dan caching dalam memori untuk aplikasi berskala internet. Untuk PHP memudahkan pemaju untuk membina aplikasi yang memanfaatkan awan AWS yang kos efektif, berskala, dan boleh dipercayai. Termasuk dalam SDK adalah perpustakaan PHP AWS dan sampel kod yang menunjukkan cara menggunakan AWS SDK untuk PHP untuk memanfaatkan semua fungsi yang disediakan oleh perkhidmatan AWS seperti Amazon S3, Amazon EC2, dan DynamoDB. Adakah beberapa dynamoDB biasa dengan contoh kod PHP?
Terdapat beberapa contoh kod biasa untuk menggunakan DynamoDB dengan PHP. Ini termasuk membuat jadual, menulis item ke meja, membaca item dari meja, mengemas kini item dalam jadual, dan memadam item dari meja. Setiap operasi ini boleh dilakukan menggunakan AWS SDK untuk php.
Anda boleh mencari skrip php untuk kedai Amazon di pelbagai platform dalam talian seperti Codecanyon. Skrip ini membolehkan anda mengintegrasikan perkhidmatan Amazon ke dalam aplikasi PHP anda, menyediakan fungsi seperti carian produk dan paparan, pengurusan keranjang belanja, dan pemprosesan pesanan. Ya, terdapat contoh lengkap untuk menggunakan DynamoDB dengan PHP. Contoh -contoh ini biasanya termasuk kod untuk membuat jadual, menulis item ke meja, membaca item dari meja, mengemas kini item dalam jadual, dan memadam item dari jadual. Mereka juga sering memasukkan contoh bagaimana menangani kesilapan dan pengecualian. Menggunakan blok percubaan. AWS SDK untuk PHP melemparkan pengecualian apabila operasi gagal, dan anda boleh menangkap pengecualian ini untuk mengendalikannya dengan cara yang sesuai dengan aplikasi anda. Terdapat beberapa cara untuk mengoptimumkan prestasi dengan DynamoDB dan PHP. Ini termasuk menggunakan throughput yang diperuntukkan untuk menguruskan kapasiti, menggunakan indeks sekunder global untuk mempercepatkan pertanyaan, dan menggunakan DynamoDB Accelerator (DAX) untuk menyediakan caching dalam memori.
DynamoDB menyediakan beberapa ciri keselamatan untuk melindungi data anda. Ini termasuk penyulitan di rehat, yang menjamin data anda dari akses yang tidak dibenarkan ke penyimpanan asas, dan penyulitan dalam transit, yang melindungi data anda kerana ia bergerak antara aplikasi anda dan dynamoDB. DynamoDB?Atas ialah kandungan terperinci PHP Master | Amazon DynamoDB: Simpan Sesi PHP dengan Pengimbang Beban. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!