インフィニティソリューションズ株式会社ブログ

これからのソフトウェア・アーキテクチャ

過去30年程度、システムは少しづつ形を変えながら、中央集中型と分散型を繰り返してきている。最初はメインフレームにダム端末という中央集中型。そこからミニコン、ワークステーション、PCの出現により、分散型になり、クライアントとサーバが分担して処理するようになった。インターネット、クラウドの出現により、中央集中型にまた戻ってきているが、モバイルの存在がクローズアップされてきて、また複雑になってきている。モバイルは常にインターネットに接続している(出来る)とは限らないため、一部クライアント側で処理できるようにする必要がある。またクラウドも、IaaS、PaaS、SaaSの階層があり、PaaS、SaaSが必ずしも独自のインフラを持っているとは限らず、AWSなどのサードパーティのIaaSを使用しているかもしれない。環境はより複雑になってきている。

その中でソフトウェア・アーキテクチャとしてはどのようなものを目指すべきなのか。その考察の1つがMethods & Tools Editor’s blogのこの「Software Architecture: Where is the Beef?(ソフトウェア・アーキテクチャ:中身はどこにある?)

‘What is the impact of such changes for software developers? Modularity is an important concept in software design and architecture. This allows changing the software technology or moving part of an application between different infrastructures. This could be one of the reasons behind the success of a technology like node.js that allows running the same JavaScript code on both the server and the browser side. Modularity has its drawbacks with a negative aspect on performance when modules call each other and possible network latency. In an open and connected architecture, developers must have contingency plans when connectivity is not possible. Mobile apps should thus be able to work even with limited connectivity. These apps will for instance scan the network and update themselves and their data when connection is available. As architecture spreads on multiple location, this also increases the need for security as the application could be attacked from many entry points or during the transmission of data between separated software layers. You have to decide how sensitive information could be distributed or transmitted on third-party platform (cloud, mobile networks).’

「このような変化はソフトウェアエンジニアにどのようなインパクトを与えているのか。モジュール性がソフトウェアの設計とアーキテクチャで重要なコンセプトになっている。これにより、ソフトウェア技術の変化や、アプリケーションの一部を異なるインフラ間で移動させることも可能となる。これは、node.jsなど、サーバとブラウザで同じJavascriptコードを動作できる技術が成功している理由の1つかもしれない。モジュール性は、モジュール同士が呼びあい、ネットワーク遅延を引き起こす場合、性能面でマイナスとなる。オープンで相互接続されたアーキテクチャでは、開発者は接続できないといった場合に対するコンティンジェンシープランを用意しておく必要がある。従って、モバイル・アプリも、接続が制限されている場合でも動作する必要がある。このようなアプリは、例えば、ネットワークをスキャンし、接続可能な時にアプリ自身やデータを更新する。アーキテクチャが多拠点にまたがっていくと、攻撃を受けうるポイントが増え、個々のソフトウェア層間でのデータ転送時に攻撃を受けるかもしれないため、セキュリティ対策の必要性が増す。また、サードパーティのプラットフォーム(クラウド、モバイルネットワーク)上で、どのように機密情報を送信するかも決めなければならない。」

‘What will be the next infrastructure for software? I don’t know, but I am sure that software developers will have to think deeper to achieve the sometimes contradictory objectives of software architecture that are evolutivity and application performance. Even in an Agile context where people sometime restrict their horizon to the end of the next sprint, software architecture is an important activity for the long-term viability of your software applications.’

「ソフトウェアの次世代のインフラはどのようなものか。分からないが、ソフトウェア開発者は、先進のソフトウェア・アーキテクチャとアプリケーション性能という、時として矛盾する目的を達成するために、熟慮を要するようになるだろう。時として見通しを次のSprintの終わりまでに制限するアジャイルですら、ソフトウェア・アーキテクチャを決めるのは、長期的にアプリケーションを活かすためには重要な活動である。」