{"id":55231,"date":"2020-01-16T00:00:00","date_gmt":"2020-01-15T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/pro-multitenancy"},"modified":"2020-02-18T14:03:19","modified_gmt":"2020-02-18T11:03:19","slug":"pro-multitenancy","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/pro-multitenancy","title":{"rendered":"About multitenancy","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Unfortunately, this term does not have a good English equivalent. Wikipedia provides <noindex><a rel=\"nofollow\" href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B0%D1%80%D0%B5%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C\">Translation<\/a><\/noindex> \"multitenancy, multiple tenancy.\" Sometimes it is referred to as \"multiple ownership.\" These terms can be somewhat confusing, as the subject is essentially unrelated to either renting or owning. It is primarily a question of software architecture and the organization of its operation, and the latter is equally important. <\/p>\n<p>We began to form our understanding of multitenancy at the same time we started designing our approach to the cloud (service) model for \"1C:Enterprise.\" This was several years ago. Since then, our understanding has been continuously expanding. We keep discovering new aspects of this subject (pros, cons, challenges, features, etc.). <\/p>\n<p><img decoding=\"async\" alt=\"About multitenancy\" src=\"\/wp-content\/uploads\/2020\/01\/a14e60822b948ecd079722ed828f853f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nSometimes developers understand multitenancy as a fairly simple task: \"to store the data of multiple organizations in one database, you just need to add an organization identifier column to all tables and set a filter based on it.\" Of course, we also started our exploration of the issue from this point. However, we quickly realized that this is just one area (which, by the way, is not simple). In general, it's a \"whole country.\" <\/p>\n<p>The main idea of multitenancy can be described as follows. A regular application is like a cottage designed for one family, which utilizes its infrastructure (walls, roof, water supply, heating, etc.). A multitenant application, on the other hand, is like an apartment building. Each family uses the same infrastructure, but the infrastructure itself is designed for the entire building as a whole. <\/p>\n<p>Is the multitenancy approach good or bad? There are very different opinions on this. It seems that there is no absolute \"good or bad\". One should compare the pros and cons in the context of specific tasks being solved. But that\u2019s a separate topic... <\/p>\n<p>In its simplest understanding, the goal of multitenancy is to reduce the costs of maintaining the application by \"sharing\" infrastructure expenses. This is similar to reducing application costs by using a packaged solution (possibly with customization and adjustments), rather than creating it \"from scratch.\" In one case, development is shared, and in the other, operation is. <\/p>\n<p>Moreover, let us reiterate that there is no direct connection to the sales method here. The multitenancy architecture can very well be applied in corporate or departmental IT infrastructure to automate a large number of similar branches within a holding company. <\/p>\n<p>It can be said that multitenancy is not just about the organization of data storage. It is a model for the entire application operation (including significant aspects of its architecture, deployment model, and service organization). <\/p>\n<p>The most complex and interesting aspect of the multitenancy model, as we see it, is that the essence of the application becomes 'split'. Part of the functionality operates with specific areas of data (apartments) and is 'unconcerned' with the fact that there are tenants in other apartments. Meanwhile, another part perceives the entire building and works for all tenants at once. However, the latter cannot abstract from the fact that these are indeed separate apartments, and it is necessary to ensure the required level of granularity and security. <\/p>\n<p>In '1C:Enterprise', the multitenancy model is implemented across several technologies. These are the mechanisms of the '1C:Enterprise' platform, the mechanisms of<noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=16065\">1C:Solution Publication Technology 1cFresh<\/a><\/noindex>\" and \"<noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=15382\">1C:Solution Development Technology 1cFresh<\/a><\/noindex>, and the mechanisms of <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/libraries\/ssl\/index.htm\">BSP<\/a><\/noindex> (standard subsystem libraries). <\/p>\n<p>Each of these components contributes to the construction of the overall infrastructure of a residential building. Why is it implemented using several technologies instead of just one, like the platform? Primarily because some mechanisms, in our opinion, are quite suitable for modification based on the specific deployment scenario. However, this is a complex issue, and we constantly face the choice of the best level for implementing a particular aspect of multitenancy. <\/p>\n<p>It is evident that the core mechanisms had to be implemented in the platform. For example, the actual separation of data \u2014 the starting point for discussions about multitenancy. But ultimately, the multitenancy model 'drove through' significant parts of the platform mechanisms and required their refinement, and in some cases, even reconsideration. <\/p>\n<p>At the platform level, we implemented the fundamental mechanisms that allow for the creation of applications operating under a multitenancy model. However, for these applications to 'live and operate' effectively in this model, a system for managing their 'lifecycles' is essential. This is where the 1cFresh technologies and the unified business logic layer at the BSP level come into play. Just as infrastructure in an apartment building provides residents with everything they need, 1cFresh technologies ensure that applications operating in a multitenancy model are equipped with all necessary resources. To enable these applications to interact with this infrastructure (without significant modifications), corresponding 'interfaces' in the form of BSP subsystems are incorporated into their design. <\/p>\n<p>From the perspective of platform mechanisms, it's easy to see that as we gain experience and evolve the cloud-based usage of '1C:Enterprise,' we expand the array of mechanisms involved in this architecture. For instance, the multitenancy model significantly alters the roles of those involved in application service management. The responsibility of those managing the applications has notably increased. They now require more robust tools for application oversight. Users of these applications (the residents) primarily place their trust in the provider they work with. To address this, we have introduced a new mechanism in version 8.3. <noindex><a rel=\"nofollow\" href=\"https:\/\/wonderland.v8.1c.ru\/blog\/profili-bezopasnosti\/?sphrase_id=12972\">security profiles mechanism<\/a><\/noindex>. This mechanism allows provider administrators to impose necessary security levels that limit developers' flexibility\u2014effectively isolating each application's operation for its corresponding tenant within designated 'sandbox' frameworks. <\/p>\n<p>The architecture for managing applications operating in a multitenancy mode (as implemented in technologies like 1cFresh and BSP) is of no lesser interest. Here, compared to the traditional deployment model, the requirements for automating management processes increase significantly. There are dozens of such processes: creating new data areas (\"apartments\"), updating applications, updating regulatory information, backups, etc. Naturally, the requirements for reliability and availability also rise. For example, to ensure reliable interaction of applications with system management components, we have implemented an asynchronous calling system technology with guaranteed delivery. <\/p>\n<p>A very delicate aspect is the way of sharing data and processes. This seems simple (if anyone thinks so) only at first glance. The main challenge lies in balancing the centralization of data and processes with decentralization. On one hand, centralization reduces costs (disk space, CPU resources, administrator efforts\u2026). On the other hand, it limits the freedom of the \"residents.\" This is precisely one of the aspects of \"splitting\" the application, where the developer needs to think simultaneously about the application in a narrow sense (serving one \"apartment\") and in a broader sense (serving all \"residents\"). <\/p>\n<p>An example of such a \"dilemma\" can be regulatory and reference information. Naturally, there is a strong temptation to make it common for all \"residents\" of the building. This allows it to be stored in a single copy and updated for everyone at once. However, there are times when a specific resident requires particular modifications. Surprisingly, this is often the case, even for information specified by regulators (government agencies). This raises a complex question: to share or not to share? It is tempting, of course, to create common information for everyone and private information for those who want it. But this leads to a rather complicated implementation. However, we are working on this... <\/p>\n<p>Another example is the design of implementing regular processes (those performed on a schedule, initiated by the management system, etc.). On one hand, they can be implemented separately for each data area. This is simpler and more convenient. However, on the other hand, such fine granularity creates a significant load on the system. To reduce this load, common processes need to be implemented. But they require more careful development. <\/p>\n<p>Certainly, a significant question arises. How can application developers ensure operation in a multitenancy mode? What do they need to do for this? Of course, we strive to have the burden of technological and infrastructural issues mostly placed on the supplied technology, allowing the application developer to focus solely on business logic tasks. However, as with other important architectural questions, application developers need some understanding of how to operate in a multitenancy model, and some efforts will be required during application development. Why? Because there are aspects that technology cannot automatically provide without considering the semantics of the data. For example, the definition of the boundaries of information sharing. But we aim to keep these complexities minimal. There are already examples of such applications. <\/p>\n<p>An important point in the context of implementing multitenancy in '1C:Enterprise' is that we create a hybrid model in which a single application can operate both in multitenancy mode and in the usual mode. This is quite a complex task and a topic for separate discussion.<br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/326654\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0443 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430 \u043d\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430. \u00ab\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f\u00bb \u0434\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u00ab\u043c\u0443\u043b\u044c\u0442\u0438\u0430\u0440\u0435\u043d\u0434\u043d\u043e\u0441\u0442\u044c, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0430\u0440\u0435\u043d\u0434\u0430\u00bb. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u00ab\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435\u043c\u00bb. \u042d\u0442\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0443\u0442\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u043f\u043e \u0441\u0443\u0442\u0438 \u043d\u0438 \u0441 \u0430\u0440\u0435\u043d\u0434\u043e\u0439, \u043d\u0438 \u0441 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435\u043c. \u042d\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u0438\u043c\u0435\u043d\u043d\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0435\u0433\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438. \u041f\u0440\u0438\u0447\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432\u0430\u0436\u043d\u043e. \u041c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":55232,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55231","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0443 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430 \u043d\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/pro-multitenancy\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u043e multitenancy | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0443 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430 \u043d\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/pro-multitenancy\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-15T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:19+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47About multitenancy | ProHoster","description":"Unfortunately, this term does not have a good Russian equivalent.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/pro-multitenancy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u043e multitenancy | ProHoster","og:description":"\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0443 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430 \u043d\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/pro-multitenancy","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-15T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55231","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:47:39","updated":"2022-09-29 20:30:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/55231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=55231"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/55231\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/55232"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=55231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=55231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=55231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}