PPL-PERTEMUAN(5)

Nama: Moh rosy haqqy aminy

NRP: 5025211012

Kelas: PPL A


Pada pertemuan kelima di kelas PPL A, kita diminta untuk berlatih membuat dan menganalisis high-level design (HLD)  dari sistem aplikasi Twitter.

referensi video: 




System Requirements

Functional Requirements:

  1. User Authentication:

    • Sistem harus memungkinkan pengguna untuk membuat akun dan login.
    • Sistem harus menyediakan mekanisme autentikasi yang aman.
  2. Tweet Management:

    • Sistem harus memungkinkan pengguna untuk membuat, mengedit, dan menghapus tweet.
    • Sistem harus menyimpan tweet di database dengan timestamp.
  3. Timeline Management:

    • Sistem harus menghasilkan timeline untuk pengguna yang menampilkan tweet dari akun yang mereka ikuti.
    • Sistem harus memperbarui timeline pengguna secara real-time saat ada tweet baru dari akun yang diikuti.
  4. Search Functionality:

    • Sistem harus memungkinkan pengguna untuk mencari tweet berdasarkan kata kunci.
    • Sistem harus mengembalikan hasil pencarian yang relevan dan cepat.
  5. Real-Time Updates:

    • Sistem harus menyediakan pembaruan real-time untuk timeline pengguna melalui koneksi WebSocket.
    • Sistem harus mendorong tweet baru ke pengikut secara real-time.
  6. Caching:

    • Sistem harus menggunakan caching untuk menyimpan timeline dan data yang sering diakses di Redis Cluster.
    • Sistem harus memperbarui cache secara efisien untuk memastikan data yang ditampilkan adalah yang terbaru.
  7. Trend Analysis:

    • Sistem harus menganalisis data tweet yang masuk untuk mengidentifikasi tren.
    • Sistem harus menyediakan data tren yang dapat digunakan untuk pelaporan dan analisis lebih lanjut.
  8. Load Balancing:

    • Sistem harus mendistribusikan permintaan klien secara efisien ke server backend untuk menghindari overload pada satu server.
  9. Data Consistency and Coordination:

    • Sistem harus memastikan konsistensi data dalam Redis Cluster melalui Zookeeper.
    • Sistem harus mampu menangani pemadaman dan penambahan node baru dalam cluster Redis.

Non-Functional Requirements:

  1. Performance:

    • Sistem harus dapat menangani hingga 10,000 permintaan per detik.
    • Sistem harus mengembalikan hasil pencarian dalam waktu kurang dari 500 milidetik.
  2. Scalability:

    • Sistem harus dapat diskalakan secara horizontal dengan menambah lebih banyak server untuk menangani peningkatan beban.
    • Sistem harus mendukung peningkatan jumlah pengguna tanpa degradasi kinerja yang signifikan.
  3. Reliability:

    • Sistem harus memiliki uptime minimal 99.9%.
    • Sistem harus mampu memulihkan diri dari kegagalan dengan cepat tanpa kehilangan data.
  4. Security:

    • Sistem harus melindungi data pengguna dengan enkripsi selama penyimpanan dan transmisi.
    • Sistem harus memiliki mekanisme untuk mencegah dan mendeteksi serangan seperti DDoS, SQL Injection, dan XSS.
  5. Maintainability:

    • Sistem harus menggunakan praktik coding standar dan dokumentasi yang baik untuk memudahkan pemeliharaan.
    • Sistem harus mendukung continuous integration dan continuous deployment (CI/CD) untuk memungkinkan pembaruan dan perbaikan yang cepat.
  6. Usability:

    • Antarmuka pengguna harus intuitif dan mudah digunakan.
    • Sistem harus mendukung berbagai perangkat, termasuk desktop, tablet, dan smartphone.
  7. Availability:

    • Sistem harus tersedia 24/7 dan mampu menangani pemeliharaan tanpa downtime yang signifikan.
    • Sistem harus memiliki mekanisme failover untuk memastikan layanan tetap berjalan saat terjadi kegagalan pada salah satu komponen.
  8. Data Consistency:

    • Sistem harus memastikan data yang ditampilkan kepada pengguna adalah konsisten dan up-to-date.
    • Sistem harus menggunakan mekanisme locking dan transaction management yang tepat untuk menghindari kondisi race.

Estimasi Kapasitas

Estimasi Trafik

Asumsikan Twitter memiliki jumlah pengguna harian sebanyak 100 juta dengan masing-masing pengguna memposting 3 tweet tiap harinya. Sehingga total trafik tweet adalah 300 juta tweet per hari. Dikarenakan Twitter adalah aplikasi yang read-heavy dimana pengguna lebih sering membaca tweet daripada memposting tweet maka diasumsikan ratio write dan read adalah 1:10. Sehingga diperoleh total trafik read adalah 3 miliar read per hari.

Estimasi Penyimpanan

Asumsikan rata-rata tweet memiliki besar 10 KB. Sedangkan dari estimasi trafik terdapat 300 juta tweet per hari, sehingga membutuhkan total penyimpanan sebanyak 3 TB per hari.

Arsitektur


High-Level Design (HLD) untuk arsitektur aplikasi Twitter. Berikut adalah penjelasan mengenai setiap komponen dalam desain ini dan bagaimana mereka berinteraksi satu sama lain:

Komponen dan Interaksinya:

  1. Clients:

    • Pengguna yang mengakses Twitter melalui berbagai perangkat seperti desktop atau smartphone.
  2. Load Balancer:

    • Mendistribusikan permintaan yang masuk dari klien ke server yang sesuai untuk menangani beban dengan efisien dan menghindari overload pada satu server.
  3. Tweets Writer:

    • Komponen ini bertanggung jawab untuk menulis tweet yang dibuat oleh pengguna ke dalam Database.
    • Menyimpan data tweet ke database untuk keperluan penyimpanan jangka panjang dan integritas data.
  4. Database:

    • Penyimpanan permanen untuk data tweet.
    • Data yang ditulis oleh Tweets Writer disimpan di sini.
  5. Home and User Timeline Service:

    • Mengelola timeline beranda dan pengguna.
    • Berinteraksi dengan Timeline Service untuk mendapatkan dan memperbarui timeline pengguna.
  6. Timeline Service:

    • Menyediakan layanan untuk membuat dan mengelola timeline untuk pengguna.
    • Menggunakan data yang diterima dari Home and User Timeline Service untuk menghasilkan timeline yang relevan.
  7. HTTP PUSH WEBSOCKET:

    • Mengelola koneksi yang persisten dengan klien untuk mendorong pembaruan secara real-time.
    • Memungkinkan pengguna untuk menerima pembaruan tweet tanpa perlu melakukan polling berulang-ulang.
  8. FANOUT (Async):

    • Layanan asinkron untuk mendistribusikan tweet ke pengikut pengguna.
    • Memperbarui cache entri untuk pengikut di Redis Cluster.
  9. Redis Cluster:

    • Cache in-memory yang digunakan untuk menyimpan timeline dan data yang sering diakses.
    • Membantu mengurangi beban pada database utama dengan menyediakan akses cepat ke data yang sering diakses.
  10. Apache Storm/Heron:

    • Platform pemrosesan stream yang digunakan untuk menganalisis data tren dari tweet yang masuk.
    • Menghasilkan data tren yang dapat digunakan untuk berbagai tujuan analisis dan pelaporan.
  11. Search Service (Earlybird):

    • Layanan pencarian yang berbasis pada Lucene.
    • Memungkinkan pengguna untuk mencari tweet dengan cepat dan efisien.
  12. Zookeeper:

    • Digunakan untuk menjaga kluster Redis tetap konsisten dan terorganisir.
    • Memastikan koordinasi yang baik dalam kluster Redis, seperti penanganan pemadaman atau penambahan node baru.

Alur Kerja Utama:

  1. Tweet Creation:

    • Klien mengirimkan tweet melalui Load Balancer ke Tweets Writer.
    • Tweets Writer menyimpan tweet tersebut ke dalam Database dan mengirimkan data ke FANOUT untuk didistribusikan.
  2. Timeline Management:

    • Home and User Timeline Service berinteraksi dengan Timeline Service untuk membuat dan memperbarui timeline pengguna.
    • Timeline yang dihasilkan disimpan dalam Redis Cluster untuk akses cepat.
  3. Real-Time Updates:

    • HTTP PUSH WEBSOCKET memastikan klien menerima pembaruan secara real-time tanpa perlu polling.
    • FANOUT asinkron memperbarui cache untuk pengikut pengguna secara real-time.
  4. Search and Trends:

    • Apache Storm/Heron menganalisis data tren dari tweet yang masuk.
    • Search Service menggunakan Earlybird (Lucene) untuk menyediakan kemampuan pencarian yang cepat dan efisien.
  5. Cluster Management:

    • Zookeeper memastikan Redis Cluster terorganisir dan bekerja dengan baik.

Arsitektur ini menunjukkan bagaimana berbagai komponen bekerja sama untuk menyediakan layanan yang cepat, skalabel, dan responsif untuk pengguna Twitter. Desain ini menggabungkan berbagai teknologi untuk memastikan tweet dapat disimpan, didistribusikan, dan diakses dengan cepat.

Komentar

Postingan populer dari blog ini

Latihan 1 (PBKK)

PPL-ETS

PPL-EAS