Distributed System Syllabus

Welly Tambunan
sarccom
Published in
5 min readDec 23, 2017
Distributed Computing

Saya melihat bahwa trend kedepan akan selalu berakar pada distributed computing. Perubahan sangat cepat terutama dengan data dan kebutuhan akan informasi yang semakin besar. Ecommerce dan startup memiliki load dan beban dari user cukup besar sehingga membutuhkan pemrosesan terdistribusi.

Berikut adalah rancangan Syllabus untuk Distributed System

1. 8 fallacy of distributed computing
2. Coupling in Distributed System
3. REST API with Java and .NET ( Golang, Ruby, Python )
4. Remote Procedural Call with gRPC
5. Messaging Pattern with RabbitMQ/ Confluent Kafka ( Golang, Ruby, Python )
6. Service Oriented Architecture / Microservices
7. CQRS, DDD and SOA ( Project )
8. Big Data with Cloudera
9. Batch Processing with Apache Spark
10. Realtime Processing with Apache Flink

8 Fallacy of Distributed Computing

Distributed System sangat erat hubungannya dengan network, sehingga kita tidak lagi hanya memikirkan bagaimana melakukan design terhadap aplikasi dengan memperhitungan satu komputer saja tetapi lebih dari satu. Aplikasi 2 tier architecture saja membutuhkan network yaitu untuk berhubungan dengan database

Karena network menjadi sesuatu yang diperhitungkan maka kita haruslah dapat memahami apa-apa saja yang perlu diperhatikan dalam hal ini. Contohnya adalah 8 fallacy of distributed computing

  1. The network is reliable.
  2. Latency is zero.
  3. Bandwidth is infinite.
  4. The network is secure.
  5. Topology doesn’t change.
  6. There is one administrator.
  7. Transport cost is zero.
  8. The network is homogeneous.

Anda dapat saja melupakan hal ini dalam membangun aplikasi terdistribusi atau sesuatu yang disebut-sebut sebagai aplikasi dengan Microservices architecture. Tapi hal diatas adalah harga mati yang akan selalu melekat pada aplikasi yang berhubungan dengan network.

8 fallacy of distributed computing

Coupling pada Distributed System

Selain network kita juga harus memperhitungkan ketergantungan atau dependensi antara satu component atau object ataupun server dari satu dengan yang lain.

Coupling ini dapat dibagi menjadi 2 bagian Coupling di aplikasi atau Coupling di system.

Coupling di aplikasi terdiri dari afferent and efferent coupling. Sementara coupling di system adalah platform, temporal dan spatial.

REST API with Java and .NET ( Golang, Ruby, Python )

Pada bagian ini kita sudah mengetahui bahwa REST API dapat menangani masalah Platform coupling. Artinya kita dapat membangun aplikasi dengan menggabungkan beberapa bahasa atau platform yang berbeda dengan metode REST API.

Tetapi hal ini sering di salah gunakan terutama dalam Microservices architecture. Dimana satu service memanggil service lain dengan REST API dan kemudian dilanjutkan dengan pemanggilan REST API yang lain. Hal ini sangat berbahaya karena akan terjadi spagethi architecture dimana sudah tentu terjadi coupling di network dan kita akan terjebak pada 8 fallacy yang sudah dibahas pada sebelumnya.

Saya hanya menganjurkan untuk melakukan REST API dalam satu service atau dari Client dan Service yang terkait.

Remote Procedural Call with gRPC

Sebenarnya hal ini tidak jauh beda dengan REST API. Jika anda membaca buku Enterprise Integration Pattern maka anda akan mengetahui bahwa ada 4 cara integrasi yaitu File, Sharing Database, RPC dan Messaging.

REST API dapat dikategorikan sama dengan RPC. Tetapi jika anda ingin memakai sesuatu yang lebih high performance dan lebih compact dari REST API anda dapat menggunakan gRPC. Jika anda pernah bermain-main dengan Java RMI atau CORBA. Ini adalah evolusinya. Hehe

Messaging Pattern with RabbitMQ/ Confluent Kafka ( Golang, Ruby, Python )

Kebanyakan orang mengabaikan model integrasi dengan messaging. Integrasi dengan messaging ini adalah salah satu topik advanced yang sangat menarik. Anda selalu menggunakan ini dalam kehidupan sehari-hari tanpa sadar. Tetapi messaging yang ada disini bukanlah instant messaging tetapi salah satu cara integrasi yang reliable dan fault tolerance.

Anda akan mempelajari pola-pola messaging dengan RabbitMQ dan berkomunikasi antar bahasa dengan messaging

Service Oriented Architecture / Microservices

Kebanyakan orang sekarang mengganggap bahwa SOA is dead and Microservice is alive and kickin. Tetapi perlu kita pahami bahwa konsep yang ada di SOA sendiri sangatlah bagus. Seperti 4 tenets dari SOA :

Tenet 1: Boundaries are explicit
Tenet 2: Services are autonomous
Tenet 3: Services share schema & contract, not class
Tenet 4: Service compatibility is based upon policy

Jadi intinya adalah loose coupling, high cohesion dan encapsulation. Sama seperti tenets of object oriented. Anda akan belajar bagaimana membagi sistem yang besar kedalam business service dan autonomous component. Anda akan menerapkan SOA dan mengarah ke Microservices yang benar.

CQRS dan DDD

Command Query Responsibility Segregation, Domain Driven Design. Setelah anda membagi-bagi system yang besar menjadi service service yang independent anda akan mulai belajar mengenai bagaimana melakukan design yang baik dalam satu service. Hal ini tentu saja akan kita design dengan object oriented.

Anda akan mempelajari cara menciptakan bahasa yang sama dengan business dan service anda akan mempunyai ubiquotuous language yang benar.

Big Data with Cloudera

Setelah kita membuat aplikasi core kita dengan SOA, CQRS dan DDD maka kita akan memasukkan fungsi baru analytics ke dalam system kita. Pola pikir disini berbeda dengan core application. Tujuan nya adalah lebih ke proses analytics yang kemudian hasilnya akan dijadikan feedback ke core system kembali.

Kita menggunakan Cloudera karena itu adalah distribusi hadoop yang paling baik untuk saat ini. Anda akan belajar bagaimana data integration, Apache Hive, Query dengan Impala, Hue dan masih banyak lagi. Dunia hadoop sangat bervariasi dan ecosystemnya sangat besar.

Batch Processing with Apache Spark

Seperti biasa kita membagi big data processing menjadi 2 bagian yaitu Batch dan Realtime. Batch akan dieksekusi secara periodik, misalkan pemrosesan reporting dan juga analisa data ter distribusi. Kita menggunakan Apache Spark untuk hal ini.

Realtime Processing with Apache Flink

Realtime processing ini adalah bagian yang sangat menarik, karena semua business akan bergerak ke arah ini. Dunia ini menjadi sangat interactive dengan realtime processing. Bayangkan anda dapat memberikan notifikasi kepada pelanggan product anda dan dapat melakukan realtime campaing untuk product anda. Anda juga akan belajar bagaimana melakukan proses terhadap data sensor dan IoT devices yang semuanya bermuara pada time series data.

Cukup menyenangkan bukan ?

Kami ingin mendengarkan pendapat anda mengenai Syllabus ini. Kita dapat berkolaborasi untuk membuatnya menjadi nyata untuk indonesia.

Cheers

--

--