HeadlinesBriefing HeadlinesBriefing 12 languages

Why State is the Hardest Thing in Software Design

ByteByteGo ·

🇬🇧 English

State is the information a system retains that affects its functionality in some way. For example, a website might keep track of users who have logged in. A document editor remembers the current text. A background worker logs which tasks it has completed and which ones are pending. A database stores the records written to it for as long as needed. Any useful software usually needs to manage state to carry out its intended functionality.

The difficulty is keeping the state correct even as requests overlap, servers are added, machines fail, and software changes are deployed. Often, the common advice is to “make the application stateless”. But this advice needs explanation. It usually means making particular application servers easy to replace while putting their important state elsewhere. It doesn’t signify a complete absence of state.

Understanding such a setup requires looking at why state exists, who owns it, and what happens when it becomes unavailable. In this article, we will look at why state is the hardest thing in software development and the multiple strategies that developers can use to manage it.

View original article →


🇸🇦 العربية

لماذا الحالة هي أصعب شيء في تصميم البرمجيات

الحالة هي المعلومات التي يحتفظ بها النظام والتي تؤثر على وظائفه بطريقة ما. على سبيل المثال، قد يتتبع موقع الويب المستخدمين الذين سجلوا الدخول. يتذكر محرر المستندات النص الحالي. يسجل العامل الخلفي المهام التي أكملها والمهام المعلقة. تخزن قاعدة البيانات السجلات المكتوبة إليها للمدة اللازمة. أي برنامج مفيد عادة ما يحتاج إلى إدارة الحالة لتنفيذ وظائفه المقصودة.

الصعوبة تكمن في الحفاظ على صحة الحالة حتى عندما تتداخل الطلبات، وتُضاف الخوادم، وتفشل الأجهزة، وتُنشر تغييرات البرمجيات. غالبًا، النصيحة الشائعة هي "جعل التطبيق عديم الحالة". لكن هذه النصيحة تحتاج إلى شرح. عادة ما تعني جعل خوادم التطبيقات المعينة سهلة الاستبدال مع وضع حالتها المهمة في مكان آخر. لا تعني غيابًا تامًا للحالة.

فهم مثل هذا الإعداد يتطلب النظر في سبب وجود الحالة، ومن يملكها، وماذا يحدث عندما تصبح غير متاحة. في هذه المقالة، سننظر في لماذا الحالة هي أصعب شيء في تطوير البرمجيات والاستراتيجيات المتعددة التي يمكن للمطورين استخدامها لإدارتها.

لماذا تعتبر الحالة أصعب شيء في تصميم البرمجيات؟

الحالة صعبة لأن الحفاظ عليها صحيحة أمر صعب عندما تتداخل الطلبات، وتُضاف الخوادم، وتفشل الأجهزة، وتُنشر تغييرات البرمجيات. النصيحة الشائعة لجعل التطبيقات عديمة الحالة غالبًا ما تعني نقل الحالة المهمة إلى مكان آخر، وليس القضاء عليها تمامًا.

العربية version →


🇧🇩 বাংলা

কেন স্টেট সফটওয়্যার ডিজাইনের সবচেয়ে কঠিন জিনিস

স্টেট হল তথ্য যা একটি সিস্টেম ধরে রাখে যা কোনোভাবে এর কার্যকারিতাকে প্রভাবিত করে। উদাহরণস্বরূপ, একটি ওয়েবসাইট লগ ইন করা ব্যবহারকারীদের ট্র্যাক রাখতে পারে। একটি ডকুমেন্ট এডিটর বর্তমান টেক্সট মনে রাখে। একটি ব্যাকগ্রাউন্ড ওয়ার্কার লগ করে যে এটি কোন কাজগুলি সম্পন্ন করেছে এবং কোনটি মুলতুবি আছে। একটি ডাটাবেস প্রয়োজন অনুযায়ী এতে লেখা রেকর্ড সংরক্ষণ করে। যেকোনো দরকারী সফটওয়্যার সাধারণত তার উদ্দেশ্যপ্রণোদিত কার্যকারিতা সম্পাদনের জন্য স্টেট পরিচালনা করতে হয়।

অনুরোধগুলি ওভারল্যাপ হওয়া, সার্ভার যোগ করা, মেশিন ব্যর্থ হওয়া এবং সফটওয়্যার পরিবর্তন স্থাপন করা সত্ত্বেও স্টেট সঠিক রাখা কঠিন। প্রায়শই, সাধারণ পরামর্শ হল "অ্যাপ্লিকেশনটিকে স্টেটলেস করা"। কিন্তু এই পরামর্শের ব্যাখ্যা প্রয়োজন। এর সাধারণ অর্থ হল নির্দিষ্ট অ্যাপ্লিকেশন সার্ভারগুলিকে প্রতিস্থাপন করা সহজ করা যখন তাদের গুরুত্বপূর্ণ স্টেট অন্য কোথাও রাখা। এটি স্টেটের সম্পূর্ণ অনুপস্থিতি বোঝায় না।

এই ধরনের সেটআপ বোঝার জন্য দেখতে হবে কেন স্টেট বিদ্যমান, কার মালিকানা এবং এটি অনুপলব্ধ হলে কী হয়। এই নিবন্ধে, আমরা দেখব কেন স্টেট সফটওয়্যার ডেভেলপমেন্টের সবচেয়ে কঠিন জিনিস এবং ডেভেলপাররা এটি পরিচালনা করতে ব্যবহার করতে পারে এমন একাধিক কৌশল।

কেন স্টেটকে সফটওয়্যার ডিজাইনের সবচেয়ে কঠিন জিনিস হিসেবে বিবেচনা করা হয়?

স্টেট কঠিন কারণ অনুরোধ ওভারল্যাপ, সার্ভার যোগ, মেশিন ব্যর্থতা এবং সফটওয়্যার পরিবর্তন স্থাপনের সময় এটিকে সঠিক রাখা চ্যালেঞ্জিং। অ্যাপ্লিকেশনগুলিকে স্টেটলেস করার সাধারণ পরামর্শের অর্থ প্রায়শই গুরুত্বপূর্ণ স্টেট অন্য কোথাও সরানো, এটি সম্পূর্ণরূপে নির্মূল করা নয়।

বাংলা version →


🇩🇪 Deutsch

Warum Zustand das Schwierigste im Softwaredesign ist

Zustand sind die Informationen, die ein System behält und die seine Funktionalität in irgendeiner Weise beeinflussen. Beispielsweise kann eine Website Benutzer verfolgen, die sich angemeldet haben. Ein Dokumenteneditor merkt sich den aktuellen Text. Ein Hintergrundarbeiter protokolliert, welche Aufgaben er abgeschlossen hat und welche ausstehen. Eine Datenbank speichert die darin geschriebenen Datensätze so lange wie nötig. Jede nützliche Software muss normalerweise den Zustand verwalten, um ihre beabsichtigte Funktionalität auszuführen.

Die Schwierigkeit besteht darin, den Zustand korrekt zu halten, selbst wenn sich Anfragen überschneiden, Server hinzugefügt werden, Maschinen ausfallen und Softwareänderungen bereitgestellt werden. Oft lautet der übliche Rat, „die Anwendung zustandslos zu machen“. Aber dieser Rat bedarf einer Erklärung. Es bedeutet normalerweise, bestimmte Anwendungsserver leicht austauschbar zu machen, während ihr wichtiger Zustand an anderer Stelle platziert wird. Es bedeutet nicht eine vollständige Abwesenheit von Zustand.

Das Verständnis eines solchen Aufbaus erfordert einen Blick darauf, warum Zustand existiert, wem er gehört und was passiert, wenn er nicht verfügbar wird. In diesem Artikel werden wir uns ansehen, warum Zustand das Schwierigste in der Softwareentwicklung ist und die verschiedenen Strategien, die Entwickler zu seiner Verwaltung nutzen können.

Warum gilt Zustand als das Schwierigste im Softwaredesign?

Zustand ist schwierig, weil es eine Herausforderung ist, ihn korrekt zu halten, wenn sich Anfragen überschneiden, Server hinzugefügt werden, Maschinen ausfallen und Softwareänderungen bereitgestellt werden. Der übliche Rat, Anwendungen zustandslos zu machen, bedeutet oft, wichtigen Zustand an einen anderen Ort zu verschieben, nicht ihn vollständig zu beseitigen.

Deutsch version →


🇪🇸 Español

Por qué el estado es lo más difícil en el diseño de software

El estado es la información que un sistema retiene y que afecta su funcionalidad de alguna manera. Por ejemplo, un sitio web puede rastrear a los usuarios que han iniciado sesión. Un editor de documentos recuerda el texto actual. Un trabajador en segundo plano registra qué tareas ha completado y cuáles están pendientes. Una base de datos almacena los registros escritos en ella durante el tiempo que sea necesario. Cualquier software útil generalmente necesita gestionar el estado para llevar a cabo su funcionalidad prevista.

La dificultad es mantener el estado correcto incluso cuando las solicitudes se superponen, se añaden servidores, las máquinas fallan y se despliegan cambios de software. A menudo, el consejo común es "hacer que la aplicación sea sin estado". Pero este consejo necesita explicación. Generalmente significa hacer que los servidores de aplicaciones particulares sean fáciles de reemplazar mientras se coloca su estado importante en otro lugar. No significa una ausencia completa de estado.

Entender tal configuración requiere observar por qué existe el estado, quién lo posee y qué sucede cuando no está disponible. En este artículo, veremos por qué el estado es lo más difícil en el desarrollo de software y las múltiples estrategias que los desarrolladores pueden usar para gestionarlo.

¿Por qué se considera el estado lo más difícil en el diseño de software?

El estado es difícil porque mantenerlo correcto es un desafío cuando las solicitudes se superponen, se añaden servidores, las máquinas fallan y se despliegan cambios de software. El consejo común de hacer las aplicaciones sin estado a menudo significa mover el estado importante a otro lugar, no eliminarlo por completo.

Español version →


🇫🇷 Français

Pourquoi l'état est la chose la plus difficile dans la conception de logiciels

L'état est l'information qu'un système conserve et qui affecte d'une manière ou d'une autre sa fonctionnalité. Par exemple, un site web peut suivre les utilisateurs qui se sont connectés. Un éditeur de documents se souvient du texte actuel. Un travailleur en arrière-plan enregistre les tâches qu'il a accomplies et celles qui sont en attente. Une base de données stocke les enregistrements qui y sont écrits aussi longtemps que nécessaire. Tout logiciel utile a généralement besoin de gérer l'état pour remplir sa fonctionnalité prévue.

La difficulté est de maintenir l'état correct même lorsque les requêtes se chevauchent, que des serveurs sont ajoutés, que des machines tombent en panne et que des changements logiciels sont déployés. Souvent, le conseil courant est de « rendre l'application sans état ». Mais ce conseil nécessite une explication. Cela signifie généralement rendre les serveurs d'applications particuliers faciles à remplacer tout en plaçant leur état important ailleurs. Cela ne signifie pas une absence totale d'état.

Comprendre une telle configuration nécessite d'examiner pourquoi l'état existe, à qui il appartient et ce qui se passe lorsqu'il devient indisponible. Dans cet article, nous verrons pourquoi l'état est la chose la plus difficile dans le développement de logiciels et les multiples stratégies que les développeurs peuvent utiliser pour le gérer.

Pourquoi l'état est-il considéré comme la chose la plus difficile dans la conception de logiciels ?

L'état est difficile car le maintenir correct est un défi lorsque les requêtes se chevauchent, que des serveurs sont ajoutés, que des machines tombent en panne et que des changements logiciels sont déployés. Le conseil courant de rendre les applications sans état signifie souvent déplacer l'état important ailleurs, pas l'éliminer complètement.

Français version →


🇮🇳 हिन्दी

सॉफ्टवेयर डिज़ाइन में स्टेट सबसे कठिन चीज़ क्यों है

स्टेट वह जानकारी है जो एक सिस्टम बनाए रखता है जो किसी तरह से इसकी कार्यक्षमता को प्रभावित करती है। उदाहरण के लिए, एक वेबसाइट उन उपयोगकर्ताओं पर नज़र रख सकती है जिन्होंने लॉग इन किया है। एक दस्तावेज़ संपादक वर्तमान टेक्स्ट को याद रखता है। एक बैकग्राउंड वर्कर लॉग करता है कि उसने कौन से कार्य पूरे किए हैं और कौन से लंबित हैं। एक डेटाबेस आवश्यकतानुसार उसमें लिखे गए रिकॉर्ड को संग्रहीत करता है। कोई भी उपयोगी सॉफ्टवेयर आमतौर पर अपनी इच्छित कार्यक्षमता को पूरा करने के लिए स्टेट का प्रबंधन करने की आवश्यकता होती है।

कठिनाई अनुरोधों के ओवरलैप होने, सर्वर जोड़े जाने, मशीनों के विफल होने और सॉफ्टवेयर परिवर्तनों के तैनात होने पर भी स्टेट को सही रखना है। अक्सर, सामान्य सलाह "एप्लिकेशन को स्टेटलेस बनाने" की होती है। लेकिन इस सलाह को स्पष्टीकरण की आवश्यकता है। इसका आमतौर पर मतलब है कि विशेष एप्लिकेशन सर्वर को बदलने में आसान बनाना जबकि उनके महत्वपूर्ण स्टेट को कहीं और रखना। इसका मतलब स्टेट की पूर्ण अनुपस्थिति नहीं है।

ऐसी सेटअप को समझने के लिए यह देखना आवश्यक है कि स्टेट क्यों मौजूद है, इसका मालिक कौन है, और जब यह अनुपलब्ध हो जाता है तो क्या होता है। इस लेख में, हम देखेंगे कि सॉफ्टवेयर विकास में स्टेट सबसे कठिन चीज़ क्यों है और डेवलपर्स इसके प्रबंधन के लिए कई रणनीतियों का उपयोग कर सकते हैं।

सॉफ्टवेयर डिज़ाइन में स्टेट को सबसे कठिन चीज़ क्यों माना जाता है?

स्टेट कठिन है क्योंकि अनुरोधों के ओवरलैप होने, सर्वर जोड़े जाने, मशीनों के विफल होने और सॉफ्टवेयर परिवर्तनों के तैनात होने पर इसे सही रखना चुनौतीपूर्ण है। एप्लिकेशन को स्टेटलेस बनाने की सामान्य सलाह का अक्सर मतलब महत्वपूर्ण स्टेट को कहीं और ले जाना है, इसे पूरी तरह से समाप्त नहीं करना।

हिन्दी version →


🇮🇩 Bahasa Indonesia

Mengapa State adalah Hal Tersulit dalam Desain Perangkat Lunak

State adalah informasi yang disimpan sistem yang memengaruhi fungsionalitasnya dengan cara tertentu. Misalnya, situs web mungkin melacak pengguna yang telah masuk. Editor dokumen mengingat teks saat ini. Pekerja latar belakang mencatat tugas mana yang telah selesai dan mana yang tertunda. Basis data menyimpan catatan yang ditulis ke dalamnya selama diperlukan. Perangkat lunak yang berguna biasanya perlu mengelola state untuk menjalankan fungsionalitas yang dimaksudkan.

Kesulitannya adalah menjaga state tetap benar bahkan ketika permintaan tumpang tindih, server ditambahkan, mesin gagal, dan perubahan perangkat lunak diterapkan. Seringkali, saran umum adalah “membuat aplikasi menjadi stateless”. Namun saran ini perlu penjelasan. Biasanya berarti membuat server aplikasi tertentu mudah diganti sambil menempatkan state penting mereka di tempat lain. Ini tidak berarti tidak adanya state sama sekali.

Memahami pengaturan seperti itu memerlukan melihat mengapa state ada, siapa yang memilikinya, dan apa yang terjadi ketika state menjadi tidak tersedia. Dalam artikel ini, kita akan melihat mengapa state adalah hal tersulit dalam pengembangan perangkat lunak dan berbagai strategi yang dapat digunakan pengembang untuk mengelolanya.

Mengapa state dianggap sebagai hal tersulit dalam desain perangkat lunak?

State sulit karena menjaganya tetap benar adalah tantangan ketika permintaan tumpang tindih, server ditambahkan, mesin gagal, dan perubahan perangkat lunak diterapkan. Saran umum untuk membuat aplikasi stateless sering kali berarti memindahkan state penting ke tempat lain, bukan menghilangkannya sepenuhnya.

Bahasa Indonesia version →


🇯🇵 日本語

なぜ状態がソフトウェア設計で最も難しいことなのか

状態とは、システムが保持する情報であり、何らかの形でその機能に影響を与えます。例えば、ウェブサイトはログインしたユーザーを追跡する場合があります。ドキュメントエディタは現在のテキストを記憶します。バックグラウンドワーカーは、完了したタスクと保留中のタスクを記録します。データベースは、必要に応じて書き込まれたレコードを保存します。有用なソフトウェアは通常、意図された機能を実行するために状態を管理する必要があります。

困難なのは、リクエストが重複し、サーバーが追加され、マシンが故障し、ソフトウェアの変更がデプロイされても、状態を正しく維持することです。多くの場合、一般的なアドバイスは「アプリケーションをステートレスにする」ことです。しかし、このアドバイスには説明が必要です。これは通常、特定のアプリケーションサーバーを交換しやすくし、その重要な状態を別の場所に置くことを意味します。状態が完全に存在しないことを意味するわけではありません。

このような設定を理解するには、状態がなぜ存在するのか、誰がそれを所有しているのか、そしてそれが利用できなくなったときに何が起こるのかを検討する必要があります。この記事では、なぜ状態がソフトウェア開発で最も難しいことなのか、そして開発者がそれを管理するために使用できる複数の戦略について見ていきます。

なぜ状態はソフトウェア設計で最も難しいことと考えられているのですか?

状態が難しいのは、リクエストの重複、サーバーの追加、マシンの障害、ソフトウェアの変更のデプロイ時に正しく保つことが困難だからです。アプリケーションをステートレスにするという一般的なアドバイスは、多くの場合、重要な状態を別の場所に移動することを意味し、完全に排除するわけではありません。

日本語 version →


🇧🇷 Português

Por que o estado é a coisa mais difícil no design de software

Estado é a informação que um sistema retém e que afeta sua funcionalidade de alguma forma. Por exemplo, um site pode rastrear usuários que fizeram login. Um editor de documentos lembra o texto atual. Um trabalhador em segundo plano registra quais tarefas concluiu e quais estão pendentes. Um banco de dados armazena os registros escritos nele pelo tempo que for necessário. Qualquer software útil geralmente precisa gerenciar o estado para realizar sua funcionalidade pretendida.

A dificuldade é manter o estado correto mesmo quando as solicitações se sobrepõem, servidores são adicionados, máquinas falham e mudanças de software são implantadas. Muitas vezes, o conselho comum é "tornar a aplicação sem estado". Mas esse conselho precisa de explicação. Geralmente significa tornar servidores de aplicação específicos fáceis de substituir enquanto coloca seu estado importante em outro lugar. Não significa uma ausência completa de estado.

Entender tal configuração requer olhar por que o estado existe, quem o possui e o que acontece quando ele se torna indisponível. Neste artigo, veremos por que o estado é a coisa mais difícil no desenvolvimento de software e as múltiplas estratégias que os desenvolvedores podem usar para gerenciá-lo.

Por que o estado é considerado a coisa mais difícil no design de software?

O estado é difícil porque mantê-lo correto é desafiador quando as solicitações se sobrepõem, servidores são adicionados, máquinas falham e mudanças de software são implantadas. O conselho comum de tornar as aplicações sem estado geralmente significa mover o estado importante para outro lugar, não eliminá-lo completamente.

Português version →


🇷🇺 Русский

Почему состояние — самая сложная вещь в проектировании программного обеспечения

Состояние — это информация, которую система сохраняет и которая каким-то образом влияет на её функциональность. Например, веб-сайт может отслеживать пользователей, которые вошли в систему. Редактор документов запоминает текущий текст. Фоновый рабочий процесс регистрирует, какие задачи он выполнил, а какие ожидают выполнения. База данных хранит записи, записанные в неё, столько, сколько необходимо. Любое полезное программное обеспечение обычно должно управлять состоянием для выполнения своей предполагаемой функциональности.

Сложность заключается в поддержании правильности состояния даже при перекрывающихся запросах, добавлении серверов, сбоях машин и развёртывании изменений программного обеспечения. Часто распространённый совет — «сделать приложение без состояния». Но этот совет требует пояснения. Обычно это означает сделать конкретные серверы приложений легко заменяемыми, помещая их важное состояние в другое место. Это не означает полного отсутствия состояния.

Понимание такой настройки требует рассмотрения того, почему существует состояние, кто им владеет и что происходит, когда оно становится недоступным. В этой статье мы рассмотрим, почему состояние является самой сложной вещью в разработке программного обеспечения, и множество стратегий, которые разработчики могут использовать для управления им.

Почему состояние считается самой сложной вещью в проектировании программного обеспечения?

Состояние сложно, потому что поддерживать его правильность сложно при перекрывающихся запросах, добавлении серверов, сбоях машин и развёртывании изменений программного обеспечения. Распространённый совет сделать приложения без состояния часто означает перемещение важного состояния в другое место, а не его полное устранение.

Русский version →


🇨🇳 简体中文

为什么状态是软件设计中最难的事情

状态是系统保留的、以某种方式影响其功能的信息。例如,网站可能跟踪已登录的用户。文档编辑器记住当前文本。后台工作进程记录已完成和待处理的任务。数据库根据需要存储写入的记录。任何有用的软件通常都需要管理状态以实现其预期功能。

困难在于即使在请求重叠、服务器增加、机器故障和软件变更部署的情况下,也要保持状态正确。通常,常见的建议是“使应用程序无状态”。但这个建议需要解释。它通常意味着使特定的应用服务器易于替换,同时将其重要状态放在其他地方。这并不意味着完全消除状态。

理解这样的设置需要审视状态存在的原因、谁拥有它以及当它不可用时会发生什么。在本文中,我们将探讨为什么状态是软件开发中最难的事情,以及开发人员可以用来管理它的多种策略。

为什么状态被认为是软件设计中最难的事情?

状态很难,因为在请求重叠、服务器增加、机器故障和软件变更部署的情况下,保持其正确性具有挑战性。使应用程序无状态的常见建议通常意味着将重要状态转移到其他地方,而不是完全消除它。

简体中文 version →