Rumah >pembangunan bahagian belakang >tutorial php >PHP Master | Amazon DynamoDB: Simpan Sesi PHP dengan Pengimbang Beban

PHP Master | Amazon DynamoDB: Simpan Sesi PHP dengan Pengimbang Beban

Lisa Kudrow
Lisa Kudrowasal
2025-02-25 10:05:09430semak imbas

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.

Kunci Takeaways

  • Amazon DynamoDB boleh digunakan sebagai kemudahan penyimpanan untuk sesi PHP, yang sangat berguna apabila aplikasi mengambil kesempatan daripada pengimbangan beban elastik dan perkhidmatan autoscaling.
  • Balancer beban elastik bertindak sebagai hujung depan untuk satu atau banyak pelayan maya, mengedarkan permintaan di antara mereka. Autoscaling membolehkan sistem memulakan lebih banyak klon pelayan web apabila terdapat trafik yang tinggi dan menutup beberapa ketika lalu lintas jatuh.
  • data sesi php hendaklah disimpan di luar pelayan maya. Satu pilihan ialah menyimpan sesi dalam pangkalan data seperti DynamoDB, yang merupakan pangkalan data NoSQL yang kuat dan cepat yang diuruskan oleh Amazon.
  • Kelas AmazondynamoDB PHP SDK rasmi dilengkapi untuk mendaftarkan dirinya sebagai pengurus sesi. AWS SDK untuk PHP memudahkan pemaju untuk membina aplikasi yang memanfaatkan awan AWS yang efektif, berskala, dan boleh dipercayai.

Apakah pengimbang beban elastik

Pengimbang beban elastik bertindak sebagai hujung depan untuk satu atau banyak pelayan maya anda. Ia menerima permintaan dan mengedarkannya di kalangan pelayan maya. Pelayan maya boleh dibuat dengan mengkloning templat mesin (AMI) atau boleh dimusnahkan jika diperlukan. Kuasa pemprosesan jika aplikasi anda boleh diubah dengan menambah atau mengurangkan pelayan maya secara dinamik.

dan autoscaling?

Apabila autoscaling menyertai permainan sistem juga boleh:
  • Mulakan lebih banyak klon pelayan web apabila terdapat trafik yang tinggi
  • Shutdown sebahagian daripada mereka apabila lalu lintas jatuh di bawah ambang yang telah ditetapkan
  • menamatkan kejadian yang tidak sihat dan menggantikannya jika diperlukan

bagaimana saya melakukannya?

Bolehkah aplikasi anda berfungsi dalam persekitaran ini? Ya jika ia memenuhi dua keperluan kritikal:
  • Oleh kerana pelayan maya dicipta secara dinamik, pelayan harus mengandungi hanya kod aplikasi dan bukan sebarang data. Ini mudah dilakukan dengan perkhidmatan DB.
  • Mana -mana keadaan sesi pengguna harus berterusan di luar pelayan maya. Ini sedikit lebih rumit, kerana secara lalai modul PHP menyimpan data ini ke dalam sistem fail pelayan Web Che.
Dan ini adalah masalah yang akan kita cuba selesaikan dalam ini ... uhm, sesi.

apa yang tidak boleh dilakukan: Sesi Sticky

Sesi Sticky adalah ciri perkhidmatan pengimbang beban elastik yang mengikat sesi pengguna ke contoh aplikasi tertentu, supaya semua permintaan yang datang dari pengguna semasa sesi akan dihantar ke pelayan maya yang sama. Kuki sesi boleh dihasilkan oleh sama ada pengimbang beban atau aplikasi, tetapi: ini dianggap sebagai amalan yang buruk. Perkara yang ideal adalah untuk merekabentuk aplikasi sebagai tidak beraksi, tetapi ini tidak selalu mungkin.

Simpan sesi anda dalam pangkalan data

Pilihan lain ialah: Simpan sesi kami di dalam pangkalan data. Ia boleh menjadi pangkalan data SQL luaran yang sama yang digunakan oleh aplikasi atau contoh MEMCACHE atau pangkalan data NoSQL yang lain. Dalam kes ini DynamoDB nampaknya sangat menarik kerana ia adalah pangkalan data NoSQL yang kuat dan cepat, ia diuruskan oleh Amazon sendiri dan juga mudah diakses dari pelayan maya kami. Juga, kelas AmazondynamoDB PHP SDK rasmi sudah dilengkapi untuk mendaftarkan dirinya sebagai Pengurus Sesi. Jika anda tidak pernah mendengar tentang DynamoDB saya cadangkan anda menonton video pengenalan ini.

Aplikasi Demo

Saya telah mengumpulkan aplikasi mudah untuk menguji keseluruhan mekanisme, anda boleh memuat turun kod sumber dari repositori GitHub kami. Kami akan menjalankan aplikasi ini menggunakan pengimbang beban elastik dan sekurang -kurangnya dua contoh. Kami tidak akan menggunakan autoscaling buat masa ini.

PHP Master | Amazon DynamoDB: Simpan Sesi PHP dengan Pengimbang Beban 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:
  • pelayan web Apache,
  • php 5.3 (kedua -dua baris arahan dan modul Apache),
  • Program Curl dan PHP Extension,
  • Pengurus Pakej Pear (diperlukan untuk memasang SDK dengan mudah),
  • AWS SDK untuk PHP (saya cadangkan pemasangan oleh pir).
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".

PHP Master | Amazon DynamoDB: Simpan Sesi PHP dengan Pengimbang Beban 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

PHP Master | Amazon DynamoDB: Simpan Sesi PHP dengan Pengimbang Beban 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. PHP Master | Amazon DynamoDB: Simpan Sesi PHP dengan Pengimbang Beban menyediakan pengimbang beban

Dengan pangkalan data dan semua contoh di tempat kita kini dapat menyiapkan pengimbang beban frontend. Dalam menu navigasi EC2, di bawah "Rangkaian & Keselamatan" pilih "Load Balancers" dan klik pada butang "Buat Load Balancer".

Pilih nama untuk pengimbang beban dan sahkan bahawa konfigurasi pendengar sepadan dengan tangkapan skrin, yang pada dasarnya mengatakan: ke hadapan semua trafik HTTP pada port 80 dari pengimbang beban ke HTTP pada port 80 dari keadaan.

PHP Master | Amazon DynamoDB: Simpan Sesi PHP dengan 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. PHP Master | Amazon DynamoDB: Simpan Sesi PHP dengan Pengimbang Beban

Anda boleh menguji aplikasi dengan meletakkan nama DNS Balancer Beban (sesuatu seperti YourName-12345678.region.elb.amazonaws.com) ke dalam penyemak imbas. Anda juga boleh mengkonfigurasi domain atau subdomain (misalnya dynamo.yourdomain.com) dengan menambahkan cname dalam panel DNS anda yang menunjuk ke url pengimbang beban. Ia tidak disyorkan untuk menggunakan IP dengan rekod kerana IP boleh berubah lebih masa.

PHP Master | Amazon DynamoDB: Simpan Sesi PHP dengan Pengimbang Beban 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.

di mana saya boleh mencari skrip php untuk kedai amazon?

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?

DynamoDB menyediakan sokongan terbina dalam untuk sandaran data dan pemulihan. Anda boleh membuat sandaran atas permintaan pada bila-bila masa, dan memulihkan data jadual anda dari sandaran ini apabila diperlukan. Ini membolehkan anda melindungi data anda daripada penghapusan atau pengubahsuaian yang tidak disengajakan, dan untuk memastikan aplikasi anda berjalan lancar walaupun sekiranya kegagalan.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Spooky Scary PhpArtikel seterusnya:Spooky Scary Php