Much less code
Transferring REST calls into the workflow definition as a declaration (with easy authentication) enabled us to remove fairly a little bit of code in our providers; one service was trimmed down right into a easy knowledge transformation perform, and one other service utterly disappeared! Two features for triggering two paths within the workflow have been wanted although, however with a future integration with Eventarc, they is probably not required anymore.
Much less setup
Within the authentic event-driven structure, we needed to create Pub/Sub subjects, and arrange Cloud Scheduler and Eventarc to wire-up providers. With Workflows, all of this setup is gone. Workflows.yaml is the only supply of setup wanted for the enterprise circulate.
Error dealing with
Error dealing with was additionally simplified in a few methods. First, the entire circulate stops when an error happens, so we have been not at the hours of darkness about precisely which providers succeeded and which failed in our chain of calls. Second, we now have the choice of making use of world error and retry insurance policies.
Now, the whole lot just isn’t at all times good! We needed to be taught a brand new service, with its quirks and restricted documentation — it’s nonetheless early, after all, and the documentation will enhance over time with suggestions from our prospects.
Code vs. YAML
As we have been redesigning the structure, an fascinating query got here up time and again: “Should we do this in code in a service or should we let Workflows make this call from the YAML definition?”
In Workflows, extra of the logic lands within the workflow definition file in YAML, relatively than code in a service. Code is normally simpler to jot down, check, and debug than YAML, however it additionally requires extra setup and upkeep than a step definition in Workflows.
If it’s boilerplate code that merely makes a name to some API, that needs to be was YAML declarations. Nonetheless, if the code additionally has additional logic, then it’s in all probability higher to depart it in code, as YAML is much less testable. Though there’s some stage of error reporting within the Workflows UI, it’s not a full-fledged IDE that helps you alongside the way in which. Even when working in your IDE in your improvement machine, you’ll have restricted assist from the IDE, because it solely checks for legitimate YAML syntax.
Lack of flexibility
The final side we’d like to say is probably a lack of flexibility. Working with a loosely-coupled set of microservices that talk by way of occasions is pretty extensible, in comparison with a extra inflexible answer that mandates a strict definition of the enterprise course of descriptions.
Choreography or orchestration?
Each approaches are completely legitimate, and every has its execs and cons. We talked about this subject when introducing Workflows. When do you have to select one strategy over the opposite? Choreography generally is a higher match if providers usually are not intently associated, or if they’ll exist in numerous bounded contexts. Whereas orchestration is perhaps greatest if you happen to can describe the enterprise logic of your software as a transparent circulate chart, which may then straight be described in a workflow definition.
To go additional, we invite you to have a more in-depth have a look at Workflows, and its supported features, by trying on the documentation, notably the reference documentation and the examples. We even have a collection of brief articles that cowl Workflows, with varied tips and tricks, in addition to introductions to Workflows, with a first look at Workflows and a few ideas on choreography vs orchestration.
If you wish to examine a concrete use case, with an event-based structure and an equal orchestrated strategy, be happy to look into our Serverless Workshop. It gives codelabs spanning Cloud Capabilities, Cloud Run, App Engine, Eventarc, and Workflows. Particularly, lab 6 is the one through which we transformed the event-based mannequin into an orchestration with Workflows. All of the code can also be obtainable as open source on GitHub.