Embrace Modular Architecture

Microservices

  • Memecah aplikasi menjadi layanan-layanan yang lebih kecil dan independen.
  • Manfaat: scalability, flexibility, dan maintenance yang lebih mudah.
  • Best Practices:
    • Definisikan batas layanan (service boundaries) yang jelas.
    • Gunakan API gateway.
    • Pastikan layanan loosely coupled.
  • Pitfalls: layanan yang terlalu granular (terlalu kecil-kecil) bisa menambah kompleksitas; pastikan ada orkestrasi layanan yang tepat.

Monolithic vs Microservice

AspekMonolithic ArchitectureMicroservices Architecture
StrukturSatu kesatuan: User Interface → Business Layer → Data Interface → 1 DatabaseKumpulan microservice independen (Microservice UI, Microservice, dst), masing-masing bisa punya database sendiri
CouplingTight coupling antar layerLoosely coupled antar service
SkalabilitasSulit diskalakan sebagianTiap service bisa diskalakan independen

Security by Design

Prinsip

  • Shift security left — integrasikan keamanan ke proses development sejak awal, bukan di akhir.
  • Lakukan threat modeling.
  • Terapkan least privilege access.
  • Pastikan keamanan menjadi bagian dari CI/CD pipeline.

Pitfalls: mengabaikan keamanan di tahap awal bisa menimbulkan kerentanan (vulnerabilities).

Best Practices

  • Gunakan secure coding practices.
  • Regularly update dependencies.
  • Lakukan security audits secara berkala.
  • Gunakan automated security testing tools.
  • Terapkan access control (RBAC — Role-Based Access Control).
  • Encrypt sensitive data.

Implement Infrastructure as Code (IaC)

  • Best practices: simpan kode infrastruktur di version control, gunakan modular templates, dan otomasi testing terhadap perubahan infrastruktur.
  • Manfaat: konsistensi, version control, dan otomasi.
  • Tools: Terraform, AWS CloudFormation, atau Ansible.
  • Pitfalls: perubahan manual bisa menyebabkan drift (ketidaksesuaian state infrastruktur dengan kode); hindari hardcoding value.

Automate with CI/CD Pipelines

  • Automation: otomasi proses build, test, dan deployment.
  • Manfaat: rilis lebih cepat, error berkurang, kolaborasi meningkat.
  • Best Practices:
    • Gunakan feature flags.
    • Terapkan automated rollback.
    • Pastikan fast feedback loops.
  • Pitfalls: test yang berjalan lama (long-running tests) bisa memperlambat pipeline; pastikan test efisien dan relevan.

Prioritize Monitoring and Logging

  • Terapkan monitoring dan logging yang komprehensif demi observability.
  • Best practices:
    • 3 pilar observability: trace, metrics, dan log.
    • Centralized logging.
    • Structured logs.
    • Actionable alerts.
    • Menyiapkan key metrics.
    • Menerapkan anomaly detection.
  • Tools: Prometheus, Grafana, dan ELK Stack.
  • Pitfalls: terlalu banyak alert bisa menyebabkan alert fatigue; pastikan alert bersifat actionable.

Design for Reliability

  • Terapkan redundancy untuk menangani kegagalan secara graceful.
  • Gunakan load balancing, failover strategies, dan latihan chaos engineering secara berkala.
  • Pastikan sistem dirancang untuk degrade gracefully (menurun performanya secara terkendali, bukan langsung crash total).

Incident Management

Prinsip

  • Prepare for incidents — siapkan diri sebelum insiden terjadi.
  • Manage incidents effectively — kelola insiden secara efektif saat terjadi.

Best Practices

  • Kembangkan incident response plan.
  • Lakukan postmortem.
  • Gunakan blameless incident reviews — review insiden tanpa saling menyalahkan, fokus pada perbaikan sistem/proses.

Foster a Collaborative Culture

  • Dorong komunikasi terbuka antar tim.
  • Best Practices: gunakan collaborative tools, lakukan retrospective secara rutin, promosikan budaya blameless, pastikan ada tim cross-functional.
  • Pitfalls: silo bisa menghambat kolaborasi; pastikan tim bersifat cross-functional.

Pitfall Umum Lain dalam Desain DevOps

  • Over-Engineering — hindari kompleksitas arsitektur yang tidak perlu.
  • Neglecting Documentation — pastikan semua proses dan konfigurasi terdokumentasi dengan baik.
  • Ignoring Feedback — terus kumpulkan dan tindak lanjuti feedback dari monitoring dan laporan pengguna.
  • Resistance to Change — bangun budaya yang menerima perubahan dan continuous improvement.

DevOps & Operasi: Pembagian Tanggung Jawab Dev vs Ops

AspekPembagian Tanggung Jawab
Hardware provisioningHardware virtual bisa dialokasikan oleh tim development atau aplikasi dengan otomasi lebih besar.
Software provisioningSoftware yang dikembangkan secara internal di-deploy oleh Dev; software lain disediakan oleh Ops.
IT function provisionSejauh Dev bertanggung jawab atas incident management dan deployment tools, Dev harus punya orang dengan keahlian untuk itu.
Specification and monitoring of SLAUntuk SLA yang spesifik ke suatu aplikasi, Dev bertanggung jawab memonitor, mengevaluasi, dan merespons insiden.
Capacity planningDev bertanggung jawab atas capacity planning aplikasi individual; Ops bertanggung jawab atas capacity planning keseluruhan.
Business continuityDev bertanggung jawab pada aspek yang melibatkan arsitektur aplikasi; Ops bertanggung jawab pada sisanya dan menyediakan layanan/kebijakan yang dipakai Dev.
Information securityDev bertanggung jawab pada aspek yang melibatkan aplikasi tertentu; Ops bertanggung jawab pada sisanya.

DevOps & Arsitektur

Penerapan DevOps dapat memicu perubahan arsitektur sistem:

  • Treat Ops as first-class citizens dari sudut pandang requirement — menambahkan requirement dari Ops ke sistem mungkin memerlukan modifikasi arsitektur.
  • Make Dev more responsible for relevant incident handling — begitu Dev sadar akan requirement penanganan insiden, bisa muncul modifikasi arsitektur.
  • Enforce deployment process yang dipakai semua pihak (Dev & Ops) — berpotensi mengubah struktur sistem.
  • Use continuous deployment — mungkin memerlukan perubahan arsitektur.
  • Develop infrastructure code — bisa mempengaruhi arsitektur dari kode infrastrukturnya sendiri.

Amazon’s Rules for Team (Prinsip Service Interface ala Bezos)

  • Semua tim wajib mengekspos data dan fungsionalitasnya melalui service interface.
  • Tim harus saling berkomunikasi hanya melalui interface tersebut.
  • Tidak ada bentuk komunikasi lain yang diizinkan antar service/tim: tidak boleh direct linking, tidak boleh membaca langsung datastore tim lain, tidak boleh shared-memory model, tidak boleh ada backdoor apa pun. Satu-satunya komunikasi yang diizinkan adalah lewat service interface call melalui network.
  • Tidak masalah teknologi apa yang dipakai tim/service lain.
  • Semua service interface, tanpa terkecuali, harus didesain dari awal agar bisa di-externalize — tim harus merencanakan dan mendesain agar interface tersebut bisa diekspos ke developer di luar organisasi.

Prinsip Arsitektur Microservice

  • Concern operasional dipertimbangkan sejak requirements specification.
  • Struktur sistem secara keseluruhan seharusnya berupa kumpulan layanan kecil dan independen.
  • Setiap layanan harus distrustful (tidak sepenuhnya percaya) baik terhadap client maupun layanan lain yang dibutuhkannya.
  • Peran tim sudah didefinisikan dan dipahami.
  • Layanan wajib teregistrasi dengan local registry/load balancer, dan harus memperbarui registrasinya secara periodik.
  • Layanan harus menyediakan SLA bagi kliennya.
  • Layanan sebaiknya stateless dan diperlakukan sebagai transient.
  • Jika layanan harus menyimpan state, state tersebut harus disimpan di external persistent storage.
  • Layanan harus punya alternatif jika layanan yang menjadi dependensinya gagal.
  • Layanan punya defensive checks untuk mencegat input keliru dari client maupun output keliru dari layanan lain.
  • Penggunaan layanan eksternal, informasi environment, dan software/library pihak ketiga harus dilokalisasi (harus melewati modul khusus untuk layanan/environment/library eksternal tersebut).

Kesimpulan

Mengintegrasikan prinsip DevOps ke dalam desain aplikasi menghasilkan peningkatan delivery, reliability, dan scalability. Kuncinya:

  • Merangkul modular architecture.
  • Mengotomasi proses.
  • Memprioritaskan security dan monitoring.
  • Membina budaya kolaboratif.

Flashcard

flashcards Apa perbedaan struktural utama antara Monolithic Architecture dan Microservices Architecture? :: Monolithic: satu kesatuan (UI-Business Layer-Data Interface) yang berbagi satu database, tight coupling. Microservices: kumpulan service kecil independen yang loosely coupled, masing-masing bisa punya database sendiri. Apa maksud prinsip “Shift security left” dalam Security by Design? :: Mengintegrasikan pertimbangan keamanan ke dalam proses development sejak tahap paling awal, bukan ditambal di akhir setelah aplikasi selesai dibangun. Sebutkan 3 tools populer untuk Infrastructure as Code (IaC). :: Terraform, AWS CloudFormation, dan Ansible. Apa itu “drift” dalam konteks IaC dan bagaimana mencegahnya? :: Drift adalah ketidaksesuaian antara kode infrastruktur dan kondisi aktual infrastruktur akibat perubahan manual; dicegah dengan menyimpan semua kode infrastruktur di version control dan mengotomasi testing perubahan infrastruktur, menghindari hardcoded values. Sebutkan 3 pilar observability. :: Trace, metrics, dan log. Apa itu blameless incident review dan mengapa penting? :: Review insiden yang berfokus pada perbaikan sistem/proses tanpa menyalahkan individu, penting agar tim mau terbuka melaporkan masalah dan belajar dari insiden tanpa rasa takut. Menurut pembagian tanggung jawab DevOps & Operation, siapa yang bertanggung jawab atas capacity planning aplikasi individual vs keseluruhan? :: Dev bertanggung jawab atas capacity planning untuk aplikasi individual, sedangkan Ops bertanggung jawab atas capacity planning keseluruhan (overall). Sebutkan inti dari “Amazon’s Rules for Team” terkait komunikasi antar tim/service. :: Semua tim wajib mengekspos data/fungsionalitas lewat service interface dan hanya boleh berkomunikasi lewat interface tersebut (via network) — tidak boleh direct linking, direct read datastore tim lain, shared-memory, atau backdoor apa pun; semua interface harus didesain agar bisa di-externalize. Sebutkan 4 pitfall umum lain dalam desain DevOps selain yang sudah dibahas per topik. :: Over-engineering, neglecting documentation, ignoring feedback, dan resistance to change.