{"id":352,"date":"2021-08-31T14:39:27","date_gmt":"2021-08-31T14:39:27","guid":{"rendered":"https:\/\/fde.cat\/?p=352"},"modified":"2021-08-31T14:39:27","modified_gmt":"2021-08-31T14:39:27","slug":"innovation-is-about-the-journey-the-mulesoft-design-services-story","status":"publish","type":"post","link":"https:\/\/fde.cat\/index.php\/2021\/08\/31\/innovation-is-about-the-journey-the-mulesoft-design-services-story\/","title":{"rendered":"Innovation is About the Journey: The Mulesoft Design Services Story"},"content":{"rendered":"<h3>Meet Mulesoft Design\u00a0Services<\/h3>\n<p>At Mulesoft, a critical part of integrating everything is building the Mule Applications that make those integrations. For such, Mulesoft has many different options for our customers to use, including <a href=\"https:\/\/www.mulesoft.com\/platform\/composer\/no-code-integration-tool\">Composer<\/a>, <a href=\"https:\/\/www.mulesoft.com\/platform\/api\/flow-designer-integration-tool\">Flow Designer<\/a>, and <a href=\"https:\/\/www.mulesoft.com\/platform\/studio\">Studio<\/a>, among others. All of those need a Mule Runtime in the back to help the customer quickly build their integrations through Design Operations. Design Operations are basically any actions that make the user\u2019s life easier: we test their connections to see if they are still valid; we autocomplete anything that we can; we inspect all the attributes the third-party accepts and their types; and we allow for a smooth experience in the UI by validating each field. Does the user want to see what kind of data will be going through a step of the integration? No problem! Design Operations have their back. Not only that, once they are done drafting their integration, they can quickly test it and see in detail what happened at each step just like with any debugging tool for any high-level language.<\/p>\n<p>So now that we understand Design Operations, we\u2019re going to be taking a closer look at <a href=\"https:\/\/blogs.mulesoft.com\/news\/introducing-mulesoft-composer\/\">Mulesoft Composer<\/a>, which extends the integration-building powers of Mulesoft\u2019s AnyPoint Platform to non-developers. It provides a no-code, point-and-click environment experience, coupled with enterprise-grade reliability, security, and governance. Behind the scenes, it\u2019s powered by Mulesoft Design Services (MDS). MDS is the first serverless architecture built within Mulesoft that helps customers build their integrations by using the full stack of the Mule Runtime\u00a0tools.<\/p>\n<p>MDS is what delivers all of the Design Operations, spelled out above, for users of Composer. And everything happens in near real-time, so the customer doesn\u2019t need to know anything about Mule Runtimes or Infrastructure while they\u2019re building their integration. To make this work, MDS uses a Kubernetes farm of pre-warmed-up Mule Runtimes to handle multi-tenancy and security isolation with high concurrency and autoscaling. Read on to find out how we built\u00a0it!<\/p>\n<h3>A Hack is\u00a0Born<\/h3>\n<p>We\u2019re not Super Architects. No one woke up one morning with a fully-formed vision for how to architect MDS, how to provide a serverless API, or how to achieve fast response times. Innovation here needed baby steps, iteration and lots of research.<\/p>\n<p>It all started during a company-wide hackathon a few years ago, fueled by energy drinks and lots of snacks. The problem we wanted to solve was, \u201cMule Runtimes are slow to start and may fail during an integration, requiring manual restart (even in our cloud product <a href=\"https:\/\/www.mulesoft.com\/platform\/api\/flow-designer-integration-tool\">Flow Designer<\/a>). How can we improve the customer experience so they don\u2019t need to care about\u00a0those?\u201d<\/p>\n<p>During the hackathon, we succeeded in having a Mule Runtime execute a single Design Operation and then destroy itself. This was the first step toward an ephemeral Mule. The idea was simple: let\u2019s break the coupling between a Mule application being designed and a Mule Runtime. Soon after, we started a Proof of Concept (POC) to find the best way to achieve this in production.<\/p>\n<h3>Proof of Concept\u00a0Research<\/h3>\n<p>The POC began with research into all the serverless tools out there. We didn\u2019t want to reinvent the wheel if we didn\u2019t need\u00a0to.<\/p>\n<p>We first looked into using <a href=\"https:\/\/aws.amazon.com\/lambda\/\">AWS Lambda<\/a> to start a Mule Runtime, execute an operation as a lambda operation, and then delete the Runtime. However, we found this took too long. Additionally, we discovered that we had some scenarios that were incompatible, as we needed some \u201cstate\u201d between certain operations (like clicking \u201cTest\u201d and having a Mule App deployed for a certain amount of\u00a0time).<\/p>\n<p>We also looked into <a href=\"https:\/\/aws.amazon.com\/api-gateway\/\">AWS API Gateway<\/a>, <a href=\"https:\/\/cloud.google.com\/appengine\">Google App Engine<\/a>, <a href=\"https:\/\/azure.microsoft.com\/en-us\/solutions\/serverless\/\">Microsoft Azure Serverless<\/a>, <a href=\"https:\/\/developer.ibm.com\/components\/apache-openwhisk\/\">IBM Apache OpenWhisk<\/a>, <a href=\"https:\/\/kubeless.io\/\">Kubeless<\/a>, and some other technologies that were aiming to solve the serverless paradigm through different strategies. With each POC, we would learn something and we would advance a bit more, but eventually we would hit a roadblock. It seemed our solution was not out there, and we would need to build something\u200a\u2014\u200abut maybe not all the way from\u00a0scratch.<\/p>\n<h3>The Solution Was In Our Own\u00a0House<\/h3>\n<p>Along came <a href=\"https:\/\/docs.mulesoft.com\/runtime-fabric\/1.9\/\">Mulesoft Runtime Fabric<\/a> (RTF), which was freshly released at about that time in our innovation journey. RTF offers a way to deploy Mule applications into a Kubernetes cluster. It includes know-how on deploying Mule Runtimes into Docker images, as well as how to connect them to the outside world using our <a href=\"https:\/\/docs.mulesoft.com\/runtime-fabric\/1.10\/custom-ingress-configuration\">RTF integrated ingress solution<\/a>. It also includes configuration, secret management, and monitoring. RTF offered us enough of a head start to build on. The POC became super-focused on having MDS work on top of an RTF\u00a0cluster.<\/p>\n<h3>On a Mission to Dreamforce<\/h3>\n<p>We started with a single service deployed inside the RTF Kubernetes cluster, and a single Design Operation to be covered: Test Connectivity. A Mule Runtime would already be deployed as a pod and we would just use it to solve the operation. We executed a request from Postman and the first scenario was a roaring success! That\u2019s it? Did we make it? No, we were FAR from finished, but this was a good start. Now that we had the simplest scenario covered we built a roadmap and started coding in\u00a0earnest.<\/p>\n<p>What were our next steps? We needed to make sure we covered all possible Design Operations. Also, if we ever wanted to go to production, we needed to have high availability (HA) everywhere, which means we needed MDS to be able to scale. All of this led us to decide that we needed to start storing some distributed state\u200a\u2014\u200abut\u00a0where?<\/p>\n<p>To avoid any incompatibilities between databases and our Kubernetes clusters, we wanted something living within the same MDS cluster. The Mule Runtime had been working for ages with <a href=\"https:\/\/hazelcast.com\/\">Hazelcast<\/a>, a clustered, NoSQL, in-memory database that works pretty well inside contexts like Kubernetes and that was already working for the Mules in RTF. Without hesitation, we put our POC hats on and gave it a try. It worked! With simple Java Collections, we had a scalable distributed state. We started building everything on top of Hazelcast.<\/p>\n<p>So now that we had all of our tools in place, the mission became clear: make it to a staging environment in time to debut at Dreamforce, Salesforce\u2019s annual customer conference.<\/p>\n<h3>Testing and Iterating<\/h3>\n<p>With hard work and a lot of focus, by Dreamforce, we had everything we needed: feature parity, a scalable product, everything deployed in a staging environment and\u2026uh oh\u200a\u2014\u200aNO SECURITY at all. Innovation is about the journey and this journey was still far from over. Luckily, the Dreamforce demo of the staging environment was a success, so we had the confidence and support from everyone to keep going on the MDS journey and make it to production.<\/p>\n<p>Along came the <strong>security and architecture reviews<\/strong>, which helped us work on great features like Network Policies and a strategy to isolate customers and avoid multi-tenant Runtimes. After that, we prepared for production and realized we needed better performance. This led us to work on a full new set of features for warming up runtimes: pre-loading dependencies, exercising classloading in a dynamic way to make it future proof, and many\u00a0others.<\/p>\n<p>With <strong>performance testing<\/strong>, we discovered that our communication with Hazelcast was not concurrency-friendly, so we had to rewrite the interaction from scratch and then do even a bit more to make it performant.<\/p>\n<p>We couldn\u2019t have predicted any of these things without walking the path of innovation, testing and iterating frequently.<\/p>\n<h3>Where We Are\u00a0Now<\/h3>\n<p>The journey took us to a point of becoming the backend of Flow Designer and onward to adding new features to work behind Composer, which takes us back to the introduction of this post. As you can see, innovation wasn\u2019t a straight line, nor was there a singular \u201ceureka!\u201d moment. Rather, innovation proved to be the result of doing the work, documenting results, and iterating until we finally have a version of MDS that we\u2019re proud of. The goal from the very beginning was to help our customers in a significant way, and we\u2019ve achieved that with MDS, which is currently generally available.<\/p>\n<p>In the end, innovation is about the journey, and this journey is still not over. Our options for the future are wide open as we work on new features regarding performance, high availability and scalability to provide a continuously better experience to a growing customer base. MDS could become a full-time Mule Serverless as a new standalone offering, it could be used by all integration tools in and out of Mulesoft, or it could be integrated with machine learning technologies to reach new unprecedented faster response times. Anything is on the\u00a0table!<\/p>\n<p><em>If you\u2019re interested in innovating with us, <\/em><a href=\"https:\/\/careers.mail.salesforce.com\/tpil-blogs\"><em>join our Talent Portal<\/em><\/a><em> to check out open roles and get periodic updates from our recruiting team!<\/em><\/p>\n<p><a href=\"https:\/\/engineering.salesforce.com\/innovation-is-about-the-journey-the-mulesoft-design-services-story-cf4fe5ec8241\">Innovation is About the Journey: The Mulesoft Design Services Story<\/a> was originally published in <a href=\"https:\/\/engineering.salesforce.com\/\">Salesforce Engineering<\/a> on Medium, where people are continuing the conversation by highlighting and responding to this story.<\/p>\n<p><a href=\"https:\/\/engineering.salesforce.com\/innovation-is-about-the-journey-the-mulesoft-design-services-story-cf4fe5ec8241?source=rss----cfe1120185d3---4\">Read More<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Meet Mulesoft Design\u00a0Services At Mulesoft, a critical part of integrating everything is building the Mule Applications that make those integrations. For such, Mulesoft has many different options for our customers to use, including Composer, Flow Designer, and Studio, among others. All of those need a Mule Runtime in the back to help the customer quickly&hellip; <a class=\"more-link\" href=\"https:\/\/fde.cat\/index.php\/2021\/08\/31\/innovation-is-about-the-journey-the-mulesoft-design-services-story\/\">Continue reading <span class=\"screen-reader-text\">Innovation is About the Journey: The Mulesoft Design Services Story<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","footnotes":""},"categories":[7],"tags":[],"class_list":["post-352","post","type-post","status-publish","format-standard","hentry","category-technology","entry"],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":688,"url":"https:\/\/fde.cat\/index.php\/2023\/03\/07\/automated-environment-build-salesforces-secret-sauce-for-rapid-cloud-expansion\/","url_meta":{"origin":352,"position":0},"title":"Automated Environment Build: Salesforce\u2019s Secret Sauce for Rapid Cloud Expansion","date":"March 7, 2023","format":false,"excerpt":"Around the world, companies must satisfy global compliance regulations or face pricey fines, where failure to comply results in 2.71 higher costs than the cost to comply. For example, Fortune 500 companies are projected to lose $8 billion per year as a result of GDPR non-compliance. In response, Salesforce created\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":690,"url":"https:\/\/fde.cat\/index.php\/2023\/03\/14\/how-is-salesforce-improving-everyday-developer-experiences-and-innovating-scalable-solutions\/","url_meta":{"origin":352,"position":1},"title":"How is Salesforce Improving Everyday Developer Experiences and Innovating Scalable Solutions?","date":"March 14, 2023","format":false,"excerpt":"In our \u201cEngineering Energizers\u201d Q&A series, we examine the life experiences and career paths that have shaped Salesforce engineering leaders. Meet Prianna Ahsan, a software engineering architect for MuleSoft\u2019s production engineering team. Prianna and her team enhance developer experiences by supporting cutting-edge projects, including the migration of MuleSoft onto Salesforce\u2019s\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":837,"url":"https:\/\/fde.cat\/index.php\/2024\/03\/12\/from-concept-to-reality-developing-mulesofts-new-flex-gateway-api-management-solution\/","url_meta":{"origin":352,"position":2},"title":"From Concept to Reality: Developing MuleSoft\u2019s New Flex Gateway API Management Solution","date":"March 12, 2024","format":false,"excerpt":"In our \u201cEngineering Energizers\u201d Q&A series, we explore the remarkable journeys of engineering leaders who have made significant contributions in their respective fields. Today, we dive into the technical journey of Evangelina Martinez Ruiz Moreno, a Senior Director at Salesforce, who spearheaded the development of MuleSoft\u2019s new Anypoint Flex Gateway.\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":558,"url":"https:\/\/fde.cat\/index.php\/2022\/03\/29\/investigate-issues-with-ease-by-adding-a-correlation-id-to-your-api\/","url_meta":{"origin":352,"position":3},"title":"Investigate Issues with Ease by Adding a Correlation ID to your API","date":"March 29, 2022","format":false,"excerpt":"With APIs becoming more complex and distributed, developers sometimes struggle to find the relevant logs when they need to investigate a specific issue. In the new Salesforce Commerce APIs (SCAPI), we created such an architecture of distributed systems and recognized this problem early. Our approach to mitigate it was the\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":593,"url":"https:\/\/fde.cat\/index.php\/2022\/03\/29\/investigate-issues-with-ease-by-adding-a-correlation-id-to-your-api-2\/","url_meta":{"origin":352,"position":4},"title":"Investigate Issues with Ease by Adding a Correlation ID to your API","date":"March 29, 2022","format":false,"excerpt":"With APIs becoming more complex and distributed, developers sometimes struggle to find the relevant logs when they need to investigate a specific issue. In the new\u00a0Salesforce Commerce APIs\u00a0(SCAPI), we created such an architecture of distributed systems and recognized this problem early. Our approach to mitigate it was the introduction of\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":315,"url":"https:\/\/fde.cat\/index.php\/2021\/08\/31\/api-federation-growing-scalable-api-landscapes\/","url_meta":{"origin":352,"position":5},"title":"API Federation: growing scalable API landscapes","date":"August 31, 2021","format":false,"excerpt":"Organizations embrace micro-services and event-driven APIs in their technology platforms to try to achieve the promise of greater agility, increased innovation, and more autonomy for their development teams. However, after the initial success, it is not unusual for organizations to face difficulties when they try to scale their distributed platforms.\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/posts\/352","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/comments?post=352"}],"version-history":[{"count":1,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/posts\/352\/revisions"}],"predecessor-version":[{"id":358,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/posts\/352\/revisions\/358"}],"wp:attachment":[{"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/media?parent=352"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/categories?post=352"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/tags?post=352"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}