Commit b6e18ab5ac873b9cf8d030f156e095a31601aa67
1 parent
bee1d5d6
Exists in
master
and in
3 other branches
content/04-architecture.tex: review
Showing
1 changed file
with
96 additions
and
86 deletions
Show diff stats
opensym2017/content/04-architecture.tex
| 1 | 1 | \section{Architecture} |
| 2 | 2 | \label{sec:architecture} |
| 3 | 3 | |
| 4 | -Based on the great list of functional requirements desired by Brazilian Federal | |
| 5 | -Government we decided to select some FOSS systems that already contemplate some | |
| 6 | -of them and improve these systems. And bringing the idea of community, it is | |
| 7 | -undoable build a platform to be used by communities, which is a complex | |
| 8 | -scenario, using just one tool. | |
| 4 | +Based on the extensive list of functional requirements defined by the | |
| 5 | +Brazilian Federal Government, we selected some FOSS systems to form our | |
| 6 | +solution. We looked for system that together could provide the largest | |
| 7 | +subset possible of the requirements, and were fully aware that we would | |
| 8 | +need to improve those systems in order to provide the rest. We were also | |
| 9 | +convinced that it would be impossible to provide all of those | |
| 10 | +requirements with a single tool. | |
| 9 | 11 | |
| 10 | -At the point of view of the architecture, two main requirements was brought by | |
| 11 | -the Brazilian Federal Government for the new platform: | |
| 12 | +From the point of view of the architecture, two main requirements was | |
| 13 | +brought by the Brazilian Federal Government for the new platform: | |
| 12 | 14 | |
| 13 | 15 | \begin{enumerate} |
| 14 | 16 | \item \textit{Integrate existing FOSS systems}, with minimal differences from |
| ... | ... | @@ -17,69 +19,81 @@ the Brazilian Federal Government for the new platform: |
| 17 | 19 | systems, as well as centralized authentication. |
| 18 | 20 | \end{enumerate} |
| 19 | 21 | |
| 20 | -Adopting existing FOSS systems by the government could bring the benefit of | |
| 21 | -improvements done by the upstream communities, and the maintenance effort. On | |
| 22 | -the other hand, integrating different tools with distinct intent, it is not an | |
| 23 | -easy task and it was important to have a consistent user interface which | |
| 24 | -justifies the last requirement. | |
| 22 | +Adopting existing FOSS systems and minimizing locally-made changes had | |
| 23 | +the objective of being able to upgrade to newer versions of the original | |
| 24 | +software, benefiting from improvements and maintenance done by the | |
| 25 | +existing project communities. Providing a consistent user interface on | |
| 26 | +top of those different tools was needed to make the transition between | |
| 27 | +the different systems seamless from the point of view of users, which | |
| 28 | +would be confused by jumping through completely different interfaces | |
| 29 | +while interacting with the portal. | |
| 25 | 30 | |
| 26 | 31 | For the first requirement, we identified four main systems that required |
| 27 | -specialized teams for work in the integration process. The teams learned how to | |
| 28 | -develop for their assigned systems and contributed to the original | |
| 29 | -communities, so that the version we used were not significantly different from | |
| 30 | -the original. | |
| 32 | +specialized teams for work in the integration process. The teams learned | |
| 33 | +how to develop for their assigned systems and contributed to the | |
| 34 | +original communities, so that the version we used were not significantly | |
| 35 | +different from the original. | |
| 31 | 36 | |
| 32 | -At the end of the project, SPB portal was composed of more than ten systems | |
| 33 | -among them we can highlight: Colab, Noosfero, Mezuro, Gitlab, Mailman, Postfix, | |
| 34 | -Munin, and so forth. The following sections explained a little bit of Colab, | |
| 35 | -Noosfero, Mezuro, and Gitlab (the main tools which we contributed). Below, we | |
| 36 | -described how we integrated those tools and conclude with the deployment. | |
| 37 | +At the end of the project, the SPB portal was composed of more than ten | |
| 38 | +systems, such as Colab, Noosfero, Mezuro, Gitlab, Mailman, Postfix, and | |
| 39 | +Munin. The remainder of this section describes the most relevant of | |
| 40 | +them, as well as how they were integrated into the platform. | |
| 37 | 41 | |
| 38 | 42 | \subsection{Colab} |
| 39 | 43 | |
| 40 | -Colab integrates web applications as its main goal, the user of this composed | |
| 41 | -system should not notice the change between the integrated applications. Colab | |
| 42 | -was designed to use one plugin for each system under its domain, this is | |
| 43 | -guaranteed by four levels of integration: | |
| 44 | +Colab\footnote{\url{https://github.com/colab}} is a systems integration | |
| 45 | +platform for web applications. One of its goals is allowing different | |
| 46 | +applications to be combined in such a way that an user does not notice | |
| 47 | +the change between applications. For that, Colab provides facilities | |
| 48 | +for: | |
| 44 | 49 | |
| 45 | 50 | \begin{itemize} |
| 46 | - \item Authentication | |
| 47 | - \item Visual | |
| 48 | - \item Events | |
| 49 | - \item Data and search engine | |
| 51 | + \item Centralized authentication | |
| 52 | + \item Visual consistency | |
| 53 | + \item Relaying of events between applications | |
| 54 | + \item Integrated search engine | |
| 50 | 55 | \end{itemize} |
| 51 | 56 | |
| 52 | -The aforementioned integrations levels were possible, because Colab works as a | |
| 53 | -reverse proxy, therefore all external requests pass through it. | |
| 54 | - | |
| 55 | -Single Sign-On (SSO) is used to login users throughout all integrated | |
| 56 | -applications. REMOTE\_USER HTTP header is sent to the applications and we | |
| 57 | -expect that they know how to handle it, since this is a common authentication | |
| 58 | -mechanism. The integrated applications should be on a local network to avoid | |
| 59 | -security issues. With this the user will be able to navigate through the | |
| 60 | -platform applications and will not be asked for authentication credentials. | |
| 61 | - | |
| 62 | -As Colab\footnote{\url{https://github.com/colab}} is a reverse proxy, it makes | |
| 63 | -some HTML transformations in the HTTP response of integrated applications to | |
| 64 | -provide a unified interface. Allows one to define some default templates to be | |
| 65 | -used by all applications and overwrite when needed in its plugin. This approach | |
| 66 | -allowed us to reuse some HTML pages which facilitates maintenance. | |
| 67 | - | |
| 68 | -A publish-subscribe implementation was used to handle events in the platform. | |
| 69 | -Thus, if some application want to trigger some action in case that other | |
| 70 | -application do something is possible. A registration of the desired events and | |
| 71 | -implementation of the handlers must be done in the plugin of each application. | |
| 72 | -This bring us many options to innovate in these integrations. | |
| 73 | - | |
| 74 | -A integrated search engine is provided by Colab. Each plugin specify which data | |
| 75 | -will be indexed and will became available for the users, just need an simple | |
| 76 | -implementation of how should perform the collection of data. | |
| 57 | +Colab implements this integration by working as a reverse proxy for the | |
| 58 | +integration applications, that is, all external requests pass through | |
| 59 | +Colab before reaching them. | |
| 60 | + | |
| 61 | +Centralized authentication is handled by letting users authenticate to | |
| 62 | +Colab, which then sends a REMOTE\_USER HTTP header to applications, | |
| 63 | +which are expected to be pre-configured to accept that as an indication | |
| 64 | +of the current user (REMOTE\_USER is a standard authentication mechanism | |
| 65 | +for web applications). This allows users to be automatically identified | |
| 66 | +to each of the applications without having to enter credentials for each | |
| 67 | +of them. | |
| 68 | +% | |
| 69 | +Of course, this requires that the integrated applications are not | |
| 70 | +accessible on the public internet, otherwise malicious users could send | |
| 71 | +their own crafted REMOTE\_USER headers and impersonate any user. | |
| 72 | + | |
| 73 | +For the visual consistency, Colab is able to make transformations to the | |
| 74 | +HTML produced by the integrated applications, ir order to provide a | |
| 75 | +unified interface. It allows one to define default templates to be used | |
| 76 | +by all applications, as well as providing extra ones in a plugin. This | |
| 77 | +approach allowed us to reuse common HTML pages, what facilitates | |
| 78 | +maintenance. | |
| 79 | + | |
| 80 | +Colab also provides a publish-subscribe event system. This allows one of | |
| 81 | +the applications, or Colab itself, to trigger an action in another | |
| 82 | +application. For example, when a user registers with Colab, all | |
| 83 | +applications need to be notified in order to create their own internal | |
| 84 | +representation of that user account. | |
| 85 | + | |
| 86 | +Colab also provides an integrated search engine, which can be configured | |
| 87 | +to specify exactly what data needs to be indexed for each of the | |
| 88 | +applications, and how to direct the user to that piece of information on | |
| 89 | +the specific application. | |
| 77 | 90 | |
| 78 | 91 | Initially, Colab had support for a small set of applications (Trac, GNU |
| 79 | -Mailman, and Apache Lucene) and all of them was hard-coded. Our team evolved | |
| 80 | -Colab so that it can now receive plugins to add support for new applications | |
| 81 | -with minimal changes to its existing core. We developed plugins to be used in | |
| 82 | -the SPB platform: Noosfero, GitLab, and Mezuro. | |
| 92 | +Mailman, and Apache Lucene) and support for them was hard-coded. Our | |
| 93 | +team evolved Colab so that it can now receive plugins that add support | |
| 94 | +new applications without the need of changes to the Colab core. We also | |
| 95 | +developed plugins to be used in the SPB platform: Noosfero, GitLab, and | |
| 96 | +Mezuro. | |
| 83 | 97 | |
| 84 | 98 | \subsection{Noosfero} |
| 85 | 99 | |
| ... | ... | @@ -92,38 +106,34 @@ home pages and documentation, and contact forms. |
| 92 | 106 | |
| 93 | 107 | \subsection{Gitlab} |
| 94 | 108 | |
| 95 | -GitLab\footnote{\url{http://gitlab.com}} is a web-based Git repository manager | |
| 96 | -with wiki pages and issue tracking features. On the one hand, Github is the | |
| 97 | -most famous and used Git repository manager. On the other hand, it is not a | |
| 98 | -FOSS. Gitlab is a FOSS platform and focuses on delivering a holistic solution | |
| 99 | -that will see developers from idea to production seamlessly and on a single | |
| 100 | -platform. Thus, we have worked on it to integrated to Colab. | |
| 101 | - | |
| 102 | -Moreover, Gitlab has several features working properly than Github that is | |
| 103 | -interesting in SPB context such as free for private projects, built-in | |
| 104 | -continuous integration and continuous deployment with best practices, more | |
| 105 | -control during downtime and upgrade, flexible permissions, Work-in-Progress | |
| 106 | -protection, move issues between projects, Group-level milestones, Create new | |
| 107 | -branches from issues, Issue board, Time tracking, as well new features and | |
| 108 | -improvements every month on the 22nd. | |
| 109 | +GitLab\footnote{\url{http://gitlab.com}} is a web-based Git repository | |
| 110 | +manager with wiki pages and issue tracking features. Gitlab is a FOSS | |
| 111 | +platform and focuses on delivering a holistic solution that will see | |
| 112 | +developers from idea to production seamlessly and on a single platform. | |
| 113 | + | |
| 114 | +Gitlab has several unique features, such as built-in continuous | |
| 115 | +integration and continuous deployment, flexible permissions, tracking of | |
| 116 | +Work-in-Progress work, moving issues between projects, group-level | |
| 117 | +milestones, creating new branches from issues, issues board, and time | |
| 118 | +tracking. | |
| 109 | 119 | |
| 110 | 120 | \subsection{Mezuro} |
| 111 | 121 | |
| 112 | 122 | Mezuro\footnote{\url{http://mezuro.org/}} is a platform to collect source code |
| 113 | -metric to monitor the internal quality of softwares written in C, C++, | |
| 114 | -Java, Python, Ruby, and PHP. GNU Mailman is used for mailing lists. | |
| 115 | - | |
| 116 | -In general, source code metric tools also do not present a friendly way to | |
| 117 | -interpret its results and, even more, do not follow a standardization between | |
| 118 | -them. Mezuro brings and presents these results to | |
| 119 | -the end user, specially, by analyzing source code metric history during its | |
| 120 | -life cycle. | |
| 121 | - | |
| 122 | -The Mezuro platform provides a single interface | |
| 123 | -grouping available tools, allows selection and composition of metrics in a | |
| 124 | -flexible manner, stores the metrics evolution history, presents | |
| 125 | -results in a friendly way, as well as, allows users to customize the given | |
| 126 | -interpretation accordingly to their own context. | |
| 123 | +metrics to monitor the internal quality of software written in C, C++, | |
| 124 | +Java, Python, Ruby, and PHP. | |
| 125 | + | |
| 126 | +In general, source code metrics tools also do not present a friendly way | |
| 127 | +to interpret its results and, even more, do not follow a standardization | |
| 128 | +between them. Mezuro collects and presents these results to the end | |
| 129 | +user, specially, by analyzing source code metric history during its life | |
| 130 | +cycle. | |
| 131 | + | |
| 132 | +The Mezuro platform provides a single interface grouping available | |
| 133 | +tools, allows selection and composition of metrics in a flexible manner, | |
| 134 | +stores the metrics evolution history, presents results in a friendly | |
| 135 | +way, as well as, allows users to customize the given interpretation | |
| 136 | +accordingly to their own context. | |
| 127 | 137 | |
| 128 | 138 | \subsection{System unification} |
| 129 | 139 | ... | ... |