About the talk
SS&C Eze provides various products in the stock market domain. We spent the last couple of years building Eclipse which is an investment suite born in cloud. The journey so far has been very interesting. The very first version of the product were a bunch of monolithic windows services and deployed using Octopus tool. We successfully managed to bring all the monolithic problem to the cloud and created a nightmare for ourselves. We then started applying microservices architecture principles and started breaking the monolithic into small services. Very soon we realized that we need a better packaging/deployment tool. Docker looked like a magical solution to our problem. Since its adoption, It has not only solved the deployment problem for us but has made a deep impact on different aspects of SDLC. It allowed us to use heterogeneous technology stacks, simplified development environment setup, simplified our testing strategy, improved our speed of delivery, and made our developers more productive. In this talk I would like to share our experience of using Docker and its positive impact on our SDLC.
Speaker: Ashish Sharma, SS&C Eze
How do I do one? Thank you for joining and we're excited about. If y'all could come this year, let me start with a quick introduction. My name is Ashish Sharma. I work for a certainty. As, as director of software engineering is a boston-based company will provide products and services in the stock market domain to automate and streamline the entire investment lifecycle. Facts about the company, we are in the business for over 25 years, serving 1900, SS managers worldwide as a company. We invest heavily in R&D. We have thousand 50-plus employees with offices located across the
globe. Before jumping on. The main topic, I quit you want to talk about some of the core offerings to give everyone more context as to what we do, as eclipse is over online Investment Management. Platform by said, investment management, firm like a hedge fund order. On a mutual fund, they're constantly running through this Investment Management life, cycle represented by the circle, using using the capabilities of a, of a platform of this business. We please play. Heifetz is on hydrogen hydrogen, sea, Hyderabad, and low latency. The lot of different parts in the investment
lifecycle. I will briefly touch upon the way already called ones, starting with creating this is where the active active Stock Market, trading happens, and this is a wedding present, engineering problem for two reasons. First, the stock market in general is watching complex domain and sticking its execution has to be ready, ready performant user can decide. Okay by let's a hundred thousand shares of Google and he can enter this information in our application. We take that all the way around it to the Brokers. And then in real time we showed you the progress on your, on your
order Denisa be reliable. It needs to be performing even a sub second delay in routing out orders to the market can cause a lot of money to our clients. Analytics, this is real-time analytics like, like a real-time view of your profit and loss. And what he uses wants to know, how much money they're making a losing as the market is Progresso, soup to put it in a contest. Contest thing about this, the price on the security can change multiple times in the second multiply that with all the Securities in the market and ready. Soon. This becomes kind of a very big data sent to
deal with an interesting problem to self compliance compliance. You can create rules like no matter what my explosion technology sector should not go below, 20% to run these compliance rules for you to make sure you're going to complain video investment strategies. You can run large, Financial models, hypothetical scenarios, like hypothetically. Let's say I want to invest $5 in Pharma, Pharmaceuticals sector. So, how does how does this decision? I would ship my order portfolio. Model Cincinnati Music in run.
And each of these bodies have a variety of different formats in which they like to send and receive data. Now, the fun part about this problem spaces to Bill like sophisticated ETL, indeed a pipeline to handle all these radiations and make it seem less account. This is a bookkeeping of all the decisions you've ever made and anytime cities fashion. Coming on the main topic. In this talk, I want to share some elements of the Geneva took from monolithic to microservices architecture and how Docker
play the critical role into making this. Your new success microservices and darker is a powerful combination. I will share with you how it impacted. Oh TxTag dilip an experienced testing strategies and delivery. And as a present this to you, from my home office and they said there's no question that we are living in this unprecedented times. The spread of covid-19 has affected the world in so many different ways and one of these has been the stock market during the radio. It is a panoramic trading volumes among of clients, was higher than we have ever recorded as a company. There's no
doubt in my mind that had been undertaken, this journey, the eclipse eclipse black form would not have been able to seamlessly. Scale, to me, this unprecedented load. So let's see how adoption of microservices in Dunkirk, has shaped our text back. OG&E started with simple idea. We wanted to build an online cloud-native investment platform and many more in this very, very early phase of the adoption. Curve, the one on the right, all you have is an idea and you're looking to see if this idea has any kind of potential market. So ended point
is it makes sense to keep your text example. The very first version of the text that looks something like this. Our front end is a single page application written in Englewood, we had around 10 to 12 back in service is all written in C sharp and depart as window Services, these Services committed to each other over and we use Microsoft sequel server for back in storage. So we kept it very simple as well, for a short time. But as a system of all time low point, where we were experiencing difficulties, killing it up, it
required coordination across the teams during the performance of a time to recovery when things went wrong. There was no proper fault isolation to in a way we experience our own share of traditional issues that we see what they want to do. The architect you. And we knew we had to do something about it. The time microservice architecture was gaining attention in the development community and it had a lot of promises around the same time. Some folks, from the, from the organization also attended. And they go too excited about using dark enough to date after they come come back. So he
applied both in today at the text that looks something like this. We have we have Bill polyglots text with Loosely coupled Services were written in different languages. Preferred languages are no GS golang. Biden, endorsement for women with different text text. Just all different problems reason. Being a sample of your building in detail Pipeline and using a language, which doesn't have which ecosystem for data manipulation, you would be burning a lot of development Cycles trying to fit in Docker is a big part of an ecosystem, all services and infrastructure components.
The run is Docker containers. They have hundred forty plus District Services running in, for fraud, with more coming up every week. Every month, the messaging infrastructure is now powered by rabbitmq in the next Council in Amazon Kinesis, I'll be extended to include my Sequel and we haven't we haven't relied on Reddit switch. This is the kind of see, no text back in it and it's conveniently welding. So wait. Now I have to worry about microservices and polyglots tagged both an option of microservices architecture alone is a steep learning curve for every with no question
about that, right? You have to worry about decomposition, pageants data showing a bi boundaries Services service Communications. A lot of different things that you have to worry about polyglots. Tax comes with your own own set of problems. They're too many options to choose from in terms of languages and Frame Works and infrastructure without going insane. A word of caution about polyglots tax. A true polyglot stack is difficult and it has a strict discipline our own internal Delavan culture and discipline
has evolved over time to put it in a spot where we can better manage against potential pitfalls but it requires but it requires ways to disappoint. Talk about how we manage Eclipse infrastructure with polyglots, tax uniform packaging, all the services are packaged, as Docker containers in a uniform package, makes it a much much easier to operate and reason about the system. He's on packaging, packaging. It makes in women, definition for simple, so then it then it's it's much much easier to create consistently Mormons, you can reliable. He's
been up like a staging test performance and I know, the woman's looks exactly identical to your party Mormons on a click of a button. Dynamics, killing our involvement, which is simple and consistent. Consistent father makes it easy to dynamically Skillet up and down. Currently in the club's, you support killing babies on resource consumption. So save your CPU goes about certain threshold. We autoscale are based on on Time by looking at the service usage patterns and this has been very useful in the recent times with the, with the covid-19 impact on the stock
market system, was able to dynamically scale up just fine. You don't seem simplified ocicat to change in. The motor is in the absence of doctor. We had like 10 different tools for building packaging deployment. Now it's all simplified but just using Jenkins as a as a dog, is he alive? Another elements of Health to manage the complexity is consistent standards standards and boundaries in place for teams who all played in a unified and Safeway and it's easy to do in monolithic, architecture and motorists act. Like you just have one language to worry about and
all the components School exist together. So you don't have to wait, you don't have to worry too much about like 8 p.m. boundaries and things like that. How do you make standards in polyglot stack? We maintain our own set of internal standards, which of eggnog tea to any framework on language and high-level meeting a service. I like accessing the database of a cash authentication and authorization, how do you make sure teams teams are using consistent patterns across the board? So the salt is we have no
service. Trampolines in all four languages and they come with this play different patterns to address all this category of concerns and they remain consistent like that. ABI boundaries services are talking to each other world. It's a restaurant Rock Hill. This becomes very important, your API needs to look for both internal and external consumers. Resolve this by creating a set of ABS standard, Indian Olivia Sanders that all services have to follow and I'll be used as an API documentation to nice-looking field and we also embraced contract driven development, and this is a
must have discipline of Love. Logan, spend multiple Services owned by different teams and and those different music from languages. So that makes contact contract you under lock. My tongue must have practice bootstrapping, how is Services get configurations in secret when it starts or we solve this problem by extracting this responsibility completely out of the service, went to start. It can expect all the configurations of secrets to be available to it and and and dr. Me, this far away is simple. To all these men. All these measures a come together to ensure consistency
between polyglot services and allow allow developers to can a focus more on the business logic. Let's take a look at how adoption of microservices architecture and darker has enabled better deal of experience. And how, how did back in the day? And then I will show you how to do breakfast looks today. And how this has been a life-changing for us to my office. I'm going to drink my coffee, the most important thing for me in the morning. I download the code from the repo build it. I will
probably bring another coffee and restore a database locally-produced Services configuration and this is a big step live. I might end up drinking three more coffees when I'm doing this and then it would be lunch time and hopefully after lunch, maybe I can work on a Saturday. I personally have spent hours and hours setting up my Dad loved any woman, and I took it even further, I would not, I would not even download the latest code. I would work off the old version of the code for as long as I absolutely don't have to end. And working with the normal, it is good. Actually came with its
own set of problems. It resulted in more issues when when the finally committed to the main line, Play, it's way. Different is Microsoft and we didn't want us to rent on 140 Services, locally on the system. So this fool is just to kind of reading the other breaks. We came up with a hybrid approach. Now adelipour only runs the service, he wants to run, he wants to work on his laptop and everything else but you are the back in service has the infrastructure company. The old come from from a shared element in woman. So the deal of
experience. Do they do something like this? Come to the office, start drinking my coffee. Download the code that I want to work on that. I'd run Docker compose up and that's it. I have a working system. And at that point I'm probably still drinking my first coffee and this is huge. I have a working locally want me to just few minutes. Earlier, I would refuse to download the latest good but today the first thing I do is to get the latest killed and getting a symbol. Local moment is the only takes a few minutes. No more no more working in the old version of the killer. So let's let's
take a look of how does hybrid service Delavan approach Works in practice and will show you how we setup and use Council to register, register my service to a shared Elementary Mormon. This is this is one of the microservices. It's really no GS this service handles the life cycle of of the stuff that I was users can borrow for short trading trading strategies. This is the local Council said why I was talking about and he is the service that I want to work on locally. I want to spend this up locally and this is the database that comes to the service. So he and I have talked
about text up dashboard there. No containers running at this time. So now let's go ahead and run Docker compose out. Then you can see on the right at the started. My stag with all three containers, the council, the local service in the database. So now what I can do is I can go to my web page, which is hosted in a shade elephant. In one moment, I need to login as myself. So, this is again to see why is coming from a shared in woman, and I need to I need to go to trading and lowercase.
Get so now what I'm trying to do is I'm making, I'm going to make some uy at it, that children read a request and my hope is that this request should reach to my service running locally on my laptop and you'll see that in the locks. Guess it'll, let's see here. I'm seeing some logs. He already let me search here for Google. Okay, still hit that. I made from the, you are great. So this is I have a local working system in just a few minutes now. And this
makes it very easy and straightforward to develop a service in isolation. And also, at the same time, working with the full and latest context of the entire running application. We also migrated from Maury Povich is like a one gigantic single River with all the code to microwave, blows away. Each people represent the Standalone service or the UI confident. So, when I want to work on a service fee is only down the code for that service and nothing else. Either makes it really easy to kind of, right?
Self-contained code, meaning the code comes with its own Exquisite set of dependencies. He knows how to go and get them. It comes with its own SDK to build and run, has it. It knows how to package itself in terms of deployment unit which is a container and all these nice benefit. We don't really relying on any or any of the system with packages all. All you need really is I don't care. In any laptop. And it's a beautiful package store, to get something to change between us and you hadn't called, like gone are the days when we used to find issues because of the Miss
mismatch in the dependency is between your local and in any other woman. It for the mix on board example. So when you called a small, it has well-defined responsibility is self-contained and spitting up a local Devin woman, only takes me a minute, it makes you teleport much, much easier Crossing be ours and and if I need a like few more fields from this API, so whatever do is, I will download the little and I will see what patterns are you saying, and I
will quickly create a pee on myself. All they have to do is just review it be sunny. This is a request craft teammate. Here is making somewhere between said 15 to 20 BPS in a week. And then up here, actually, turn out the team, a was busy, making pianos in cooking, these people. So we see a lot of patterns like this. How adoption of Michael services in Darker has impacted with testing strategies, we decided to move towards microservice architecture for mainstream telephone practice venue. Testing was going
to be challenging for services via the teens were relying more and more on the integration test to test the services. Which was not going to many division test can slow down your delivery Pipeline and they can be very flaky. Play me feel better already. Knowing all these reasons we have to shift left and think about how do you want to test it with services? Female. It would seem Sydel observed services in isolation. As you saw in the previous demo and we wanted to do the same for testing. How can we test your services in isolation with more
confidence? So, you think some of the my groceries architecture principles and darker enable us to do exactly the same, I'll show you how. The diagram of the left you can you can think of it as a service to service exposes multiple resources as an API. Like this was wondering here and its implementation is deep layer of Texas, all the way to the database. The small boxes Yeti presents unit test, we take a small unit of code and we tested thoroughly but you alone doesn't give us enough confidence that when all these units coming together, they are going to work as expected and
that's why we need service test to test the depth of the service. The long thing boxes, you can be seen as service desk. And if I call, if I call this one, a beer from outside, it will exercise all the layers including the database and produce and produce an expected result. Easy, the consistent, they clean up after each run and in the produce of this, nice goal to reach the boots, which gives a lot of confidence about of a code. Nice. If, as unit test, what are the challenges with service is set of
different services in test data? Do I need to run, do what do I need to run all the services at my service? Depends on, maybe just have to depend on what services do. It makes a graph of services and do I need to run all the databases that these Services used in building is a woman with deep gravel services and it's expensive. This table it's it's going to be it's going to be flaky and even if I manage to do all this, I know I know it will it will slow dance, slow to execute, and I practically cannot trigger them on every second. Let's see how microservice architecture in dog to have
survived these points. Starting with dependency Services. When you are operating in the microservice, architecture as a service, you really cared about you text me to Consumers and you give me the dependencies and nothing else beyond that, just you and me, the dependencies using the advantage, we created a simple mocking framework and it was inspired by the web. Follow technique. I know all the API that depend on a front, I'm going to call when when I take it anywhere close So, now, what I can do is I can I can actually tell this walking framework about all these apis and this
Morgan framework, when their father can go to these apis as a, like a crawler and download, download the data from those apis and save them in a Jason's mask on. And later during the test run, these nuptials can be served as walk to my service. Can really tell the difference if the if it is coming from a real service or if it's coming from Moksha risk, This solves, our problem of 8, gravel Services, the next step is to build reliable test street. I was service test would look something like this, the food containers, the service container in the middle
and then the one we want to test the database container that comes to the series. It has a more container which is going to serve the Jesus Falls. The downtown do the father be downloaded with using the crawler and it has the best kind of dinner. We just execute test against the service trucks in action in this demo. I will show you the crawler based marketing technique to download the snapshot of the immediate dependencies. And then I will run a set of service desk. Okay, so here is the same service again.
I need to find her a lesson 10 speed, it is. So I want to show you a p.m. mappings, my service depends on. I know them up front so I can add them here. I want this, rain would lose it will go over these apis and download the data in Json files. So, let me run the download to now. So what are you doing behind the scenes? It's it's going to one of the shed in one man's and, and saluting all these apis. It's going to download these files, then I will show you after it's done. So let's see here.
Okay, here's the whole list of files that I downloaded the activity of downloading. This is kind of Independent of running the tests, the frequency of download really depends on the stability of the dependent API. Like if if it is a brand new integration that you might want to take frequent snapshots, otherwise you can take it once a month now. Do it. What it will do is it will create the three containers 1, the service itself to more. Container does Bismarck container will now serve the
Jesus, possibly just downloaded and I will save it as Marc and his container and the end. Now let's run the test, container the OBD test and dinner. Okay, so now you can see on this ride, that it started a test client. Continue this clean condenser is making requests to the service at Speedy request of the service and the service is down talking to the walk. In order to process this request, all the database and then go back to the to the test container of the client test line for
dinner and at times, and it is for the kind of validating the results on top of it. So it's all just a couple of things to notice here. 5108 s in 20 seconds, super fast, right? And then it creates a generous this nice code coverage report so it is possible to get code coverage for all running services. And so what we have been able to do just now is to test the full depth of the service and isolation and the characteristics of nice tits in line with the unit is that easy to write the adoption of this. Telephone services has been impressive, almost
all the teams are doing it now. They're fat since everything is locked and as we saw it, when a hundred a test in 20 seconds but really fast only break for real reasons and not because of some flakiness and they were meant to encourage Innovation. It is possible to get some get good coverage for my running Service as you saw in the demo. The immutability aspect of. Docker, Container makes clean up super easy. Just restart the containers after you're done and the trigger on every check in. So, Jen can see why pipelines are set up in such a way that it makes me stressed
upon every second? And the same service desk sweet can be further use for other style of test. He is an example of how we run chaos test within the same setup. So this is a kiosk in the area where we want to calculate the profit-and-loss based on the side of the price, if the real-time API fails to return the data, This week in the way to do it is kind of by hijacking, one of the standard HDTV standard heaters and tagged it with some unique value of US. 501 the service receive this request. It doesn't do anything with his head is. All he has to do is
to make sure if it should pass all these haters to the downstream cause the market in this case and the Marcus little bit more intelligent. And when it sees this special tag, it will return 500 status code instead of returning the real result and then that would make the service can fall back into this chaos mode. In this case is used to talk of the price of the system in isolation. And the same setup can be used for other different types of tests. After the adoption of micro services in Duncan ecosystem, it completely changed the way we deliver software and we appreciate this, I will show
how we used to deliver back in the middle of the day is then compared with how we deliver it today. So we had, we can only departments and a dedicated team to do it. It was a painful process, a death from each team, I would be on call in case something goes wrong. You look what extended downtown downtime. And the road next to a lady very painful and since it was like, we can only appointment. They were changes that are going into it. So it was a problem. We had to roll back all the changes. Today we have Dilly. Anytime departments have empowered,
elephant, ears to push the CO2 production identify multiple times in the day and all of them is a zero downtime and the brakes are much easier. Now, just only look like the problematic service history. 550 four times in last 60 days moving average of 10 to 12 departments a day and Max switching to 2122 deployments and it was Long Beach there. The Guess Who you see, I'm probably the weekend so we are not deploying on weekends anymore. I work with your touch upon patterns for safe delivery
and I choose these to the dark launch in the future. Toggle for two reasons, for us. If you're in the Journey of migrating, from one of the dick to microservices these two can be real real, good assets and second, they don't require any sophisticated set-up, you can just do it with simple syrup. Dock launch is a practice where imagine if it will be one cold bath and he won't agree to be too. So, the first thing is to close the input that going into ribbon and then executive board V1, and V2, go bad in Palo and I could delete you with the cloning put. And then you can compare the results of
video games. Everyone for the correctness and preparedness and performance to this will allow you to gain more confidence in your new code. I'll just make sure it doesn't read it, the state of the system, otherwise you have issues. So we do need to be careful when pulling it out in the production. So you can limit the blast radius by using $50 switch beso toggle and if the target is on London video cord back, otherwise continue on V1. So in case something goes wrong, you can immediately turn off the tangle. It will improve your
meantime to recovery significantly. I want to wrap this up with key takeaways starting with text act microservices with Pauline love sex, a truly magical, they can further amplify your ability to react to changing Market, but it requires strict engineering, discipline experience in West into making a delivery experience as quick. And as smooth as possible, your developers will love it. Testing, testing in my world can be way hot shift left. Think about how to test your services in isolation delivery. Delivery. Your
focus should be to improve your meantime to recovery. Once you've achieved this level of maturity in the micro series architecture, where do you have polyglots tax services? Can be developed and tested in isolation theme song. In power to push CO2 production, your software development life cycle will absolutely run on steroids. Thank you.
Buy this talk
Buy this video
With ConferenceCast.tv, you get access to our library of the world's best conference talks.