Arsitektur Aplikasi - lebih sedikit sistem besar vs sistem yang lebih kecil


8

re: Aplikasi Arsitektur , yaitu, " ilmu dan seni memastikan rangkaian aplikasi yang digunakan oleh suatu organisasi untuk membuat aplikasi komposit scalable, dapat diandalkan, tersedia dan dikelola. "

Saat melihat berbagai aplikasi dalam suatu organisasi, saya dapat melihat berbagai alasan untuk menggabungkan aplikasi, tetapi terkadang juga alasan yang baik untuk memisahkannya.

Secara umum , apa pro dan kontra dari memiliki lebih sedikit sistem besar versus sistem yang lebih kecil (mengingat bahwa banyak sistem akan bertukar informasi).

Saya sedang memikirkan hal-hal seperti: lebih sedikit, aplikasi yang lebih besar berarti lebih sedikit pipa di antara aplikasi, tetapi aplikasi yang lebih kecil berarti lebih banyak fleksibilitas untuk masing-masing departemen.

Adakah literatur tentang hal ini, atau adakah yang punya daftar pro dan kontra yang mereka temukan?

sunting: Dalam skenario saya, banyak aplikasi mungkin dapat disesuaikan yang dibuat sendiri daripada dikembangkan sendiri, tetapi jangan ragu untuk mempertimbangkan skenario yang lebih umum.


1
Perhatikan bahwa aplikasi yang lebih besar tidak berarti tidak ada pipa ledeng, itu hanya berarti pipa ledeng akan muncul di dalam aplikasi.
deadalnix

@deadalnix: setuju. Saya senang berasumsi bahwa menautkan data dalam suatu aplikasi lebih mudah daripada menghubungkan data antara aplikasi.
codeulike

Jawaban:


3

Tak jauh dari kepala saya

Sistem yang Lebih Kecil

  • Pro - Tingkatkan perangkat keras komoditas, atau lingkungan virtual yang lebih murah.
  • Pro - Dapat menerapkan penskalaan berdasarkan permintaan di Cloud.
  • Pro - Lebih sedikit dependensi intra-sistem, yaitu. 1 layanan per server.
  • Pro - HA / DR (Ketersediaan Tinggi / Pemulihan Bencana) biasanya lebih mudah diimplementasikan
  • Con - Harus skalabel secara horizontal
  • Con - Semakin banyak sistem, semakin banyak interkoneksi semakin rumit manajemennya

Sistem yang Lebih Besar

  • Pro - sedikit interkoneksi yang biasanya berarti itu kurang rumit
  • Pro - Menanggapi lebih cepat ke penggunaan puncak tinggi jika itu dalam toleransi.
  • Pro - sedikit sumber daya untuk mengelola
  • Pro - Penggunaan sumber daya yang lebih efisien (dengan asumsi penggunaan yang relatif konstan)
  • Con - Ketergantungan intra-sistem yang lebih rumit, yaitu. N layanan per server
  • Con - HA / DR biasanya lebih sulit / lebih rumit

Terima kasih, bagus. Bagaimana Anda melihat manajemen perubahan cocok - mungkin perubahan lokal lebih mudah dengan sistem yang lebih kecil, perubahan di seluruh domain lebih mudah dengan sistem yang lebih besar?
codeulike

Manajemen perubahan dapat dilakukan secara manual pada sistem yang lebih sedikit, tetapi dapat dengan cepat keluar dari kendali pada banyak sistem dan harus otomatis.
dietbuddha

1

Dalam sistem yang lebih besar, jauh lebih mudah untuk:

  • Bagikan fitur dan kode. Anda akan menemukan kembali roda sedikit kurang. Misalnya, jika Anda memiliki sepuluh aplikasi yang harus memiliki akses ke database, Anda harus menentukan string koneksi di dalamnya , yaitu sepuluh kali. Atau Anda harus membuat perpustakaan terpisah dan referensi sepuluh kali lagi.

  • Konsolidasikan alur kerja , termasuk proses penyebaran.

  • Kelola sistem: lebih sedikit aplikasi untuk dikelola umumnya lebih mudah .

  • Menyatukan pengalaman pengguna . Ketika seorang karyawan harus berurusan dengan sepuluh aplikasi yang berbeda, ia dapat dengan mudah hilang: aplikasi apa yang harus dijalankan untuk melakukan A? Dalam aplikasi apa tersedia opsi B? Tapi jangan terlalu menyatu . Tidak ada yang akan menghargai Word, PowerPoint, Outlook, Penerbit, Visio, Project dan Groove sebagai aplikasi monolitik tunggal.

Di sekelompok sistem kecil, di sisi lain, Anda akan menemukan bahwa:

  • Anda dapat meninggalkan seluruh sistem jika Anda tidak membutuhkannya lagi. Atau mulai dari awal jika basis kode menjadi tidak dapat digunakan dari waktu ke waktu. Ini tentu saja hanya benar jika sistem lain tidak bergantung pada yang satu ini, atau jika antarmuka cukup ringan untuk dengan mudah ditulis ulang dalam versi baru.

  • Anda dapat membentuk tim pengembang baru dan berharap dari mereka untuk memahami basis kode yang ada dalam waktu yang lebih singkat . Jika itu adalah bagian dari proyek besar, kemungkinan mereka akan membutuhkan lebih banyak waktu, kecuali jika basis kode besar keseluruhan dilakukan dengan sangat profesional dan di-refactored dengan sangat baik (saya belum melihat basis kode seperti itu dalam hidup saya).

  • Administrator sistem akan dapat memindahkan aplikasi dengan lebih mudah . Sistem yang lebih besar, di sisi lain, baik skala di banyak server, atau tidak.

  • Pengembang dapat memigrasi basis kode ke standar baru dengan lebih mudah . Memigrasi basis kode besar selalu menakutkan. Sebaliknya, ketika Anda harus berurusan dengan basis kode kecil, lalu yang lain, lalu yang lain, dan seterusnya, itu menjadi kurang menakutkan.

Karena itu, perbandingan seperti itu hanya berfungsi dalam kasus umum, tetapi keputusan Anda harus diambil bukan dari kumpulan, tetapi dari aset perusahaan Anda. Bagaimana cara mengaturnya? Apakah ada banyak tim pengembang kecil atau beberapa yang besar? Apakah ada pedoman ketat tentang gaya pengkodean dan hal-hal serupa?

Itu juga tergantung pada aplikasi itu sendiri. Misalnya, tidak masuk akal untuk mengirimkan semua aplikasi Microsoft Office sebagai satu aplikasi. Tetapi itu juga akan merusak produktivitas, misalnya, memisahkan Adobe Photoshop dalam aplikasi untuk menggambar dan satu lagi untuk retouching foto. IMO, keputusan untuk menyatukan atau memisahkan produk harus merupakan keputusan bisnis, bukan keputusan yang murni teknis.

Akhirnya, saya juga ingin menjawab komentar kedua dari pertanyaan awal:

Saya senang berasumsi bahwa menautkan data dalam suatu aplikasi lebih mudah daripada menghubungkan data antara aplikasi

Itu tidak selalu benar. Jika Anda berurusan misalnya dengan .NET, tidak jarang mengirimkan aplikasi tunggal di mana komponen yang berbeda dipertukarkan melalui WCF. Dalam hal ini, ini sebanding dengan satu set aplikasi terpisah yang berkomunikasi melalui WCF.

Tentu saja, ketika Anda harus berurusan dengan banyak aplikasi, Anda harus menetapkan beberapa cara bagi mereka untuk berkomunikasi, sedangkan memiliki satu aplikasi monolitik tidak memaksa Anda untuk melakukan itu. Tetapi apakah Anda benar-benar dapat menulis aplikasi monolitik besar?


0

Baca ini. Ini adalah filosofi "banyak program kecil" Unix. Linux juga menggunakannya. Daya tahan yang luar biasa dari filsafat ini (dari akhir 1960-an hingga hari ini) menunjukkan bahwa itu adalah hal yang benar untuk dilakukan.

http://en.wikipedia.org/wiki/Unix_philosophy#Eric_Raymond

http://en.wikipedia.org/wiki/Unix_philosophy#Mike_Gancarz:_The_UNIX_Philosophy

http://159.93.17.14/usoft/WWW/LJ/Articles/unixtenets.html

http://www.linuxjournal.com/article/2877


OK, jadi itu berfungsi untuk satu set komponen dalam suatu sistem operasi, tetapi apakah itu bekerja untuk satu set aplikasi basis data dalam suatu organisasi? Itu skenario yang sangat berbeda.
codeulike

Sama sekali bukan skenario. Bisakah Anda memberikan beberapa perbedaan spesifik?
S.Lott

@codeulike: apakah ini pertanyaan Anda? "Apakah ada literatur tentang ini," Jika demikian, ini adalah literatur. Saya tidak mendapatkan komentar Anda dalam konteks pertanyaan Anda.
S.Lott
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.