WEBVTT
00:00:00.700 --> 00:00:06.793
Welcome everyone to another episode of Dynamics Corner, the podcast where we dive deep into all things Microsoft Dynamics.
00:00:06.793 --> 00:00:16.952
Whether you're a seasoned expert or just starting your journey into the world of Dynamics 365, this is your place to gain insights, learn new tricks and how it all works in the back end.
00:00:16.952 --> 00:00:17.984
I'm your co-host.
00:00:18.024 --> 00:00:19.582
Chris, and this is Brad.
00:00:19.582 --> 00:00:23.393
This episode was recorded on July 26th 2024.
00:00:23.393 --> 00:00:27.550
Chris, chris, chris, what an amazing discussion.
00:00:27.550 --> 00:00:35.100
My mind is overflowing with all of the information we learned Today.
00:00:35.100 --> 00:00:47.914
We had the opportunity to learn more about the Business Central performance, online backup, security, performance and partner tools, and much more.
00:00:47.914 --> 00:00:50.981
With us today, we have the opportunity to speak with Dmitry Chaydev.
00:00:50.981 --> 00:01:08.311
Good morning, gentlemen.
00:01:09.512 --> 00:01:10.953
Good morning, good afternoon, how are?
00:01:10.972 --> 00:01:11.313
you doing.
00:01:12.373 --> 00:01:14.555
Yes, good time of the day yes.
00:01:15.156 --> 00:01:16.897
Excellent time of the day and it's Friday.
00:01:16.977 --> 00:01:18.918
Nice background bread there.
00:01:24.480 --> 00:01:26.463
Yeah, you know, chris has been sitting outside the past couple discussions that we've had.
00:01:26.463 --> 00:01:31.834
So I figured today, since I'm, you know, in the northern part of the country, I might as well sit outside and appreciate it as well.
00:01:31.834 --> 00:01:33.340
It's finally a nice day out.
00:01:34.081 --> 00:01:36.683
Fantastic Nice no great to see you, great to see you.
00:01:36.683 --> 00:01:37.364
Yes, nice to see you.
00:01:37.364 --> 00:01:38.224
The weather is great.
00:01:38.243 --> 00:01:38.664
Yes, yes, yes.
00:01:38.664 --> 00:01:40.084
How was your vacation Perfect.
00:01:40.084 --> 00:01:44.487
Yes, yes, yes, how was your vacation Perfect perfect.
00:01:45.429 --> 00:01:53.013
I spent the whole three weeks out there in Spain, with some of that time with my parents.
00:01:53.013 --> 00:01:55.295
So incredible to meet everybody.
00:01:55.295 --> 00:02:04.804
My brother lives there in Spain so we had some really good time there together and it's a nice area I can definitely recommend.
00:02:04.804 --> 00:02:07.370
It's not too far from Valencia, so the coastline is beautiful.
00:02:07.370 --> 00:02:12.188
Small towns along the coastline, nice mountains.
00:02:12.188 --> 00:02:16.963
For hiking I mean great area, so I could most definitely recommend that.
00:02:17.305 --> 00:02:41.296
I'm jealous and one thing it's very, very few people here in the United States take vacations like they do in Europe, and I wish we did, because that's one thing I'm envious of is that you know, in Europe, most of the countries, most of the individuals that I speak with take the vacations and enjoy the vacations and appreciate the vacations like they should.
00:02:41.296 --> 00:02:43.828
You know, doing things, spending time with your family.
00:02:43.828 --> 00:02:46.325
I know here in the United States very few do it.
00:02:46.325 --> 00:02:54.674
We have that you know we'll take a Friday off and have a three-day weekend, which really doesn't do anything, because I think with a three-week vacation
00:02:55.341 --> 00:03:00.272
you get to spend a couple days unwinding, you know, forgetting about work, kind of de-stressing.
00:03:00.272 --> 00:03:06.923
Then you get to have your vacation and enjoy it and then you know you have what I call, like you know, the sunday horrors.
00:03:06.923 --> 00:03:12.147
I guess you could call it, because then, a couple days before you go back, you start getting okay, what am I going to go back to, what do I have to deal with?
00:03:12.147 --> 00:03:25.611
So having that three week period of time gives you that, you know, chance to really detach and relax, whereas you know, if you do it for a long weekend or even sometimes just a week, you really can't let go.
00:03:25.812 --> 00:03:27.604
So I'm glad you're absolutely right.
00:03:27.604 --> 00:03:32.944
Like, practically I only had one week of vacation because you're absolutely right in the mindset.
00:03:32.944 --> 00:03:41.467
The first week was all wind world of what's going on in the office where I am, you know logistics and still catching up with a few things.
00:03:41.467 --> 00:03:47.181
But then the second week, full relaxation, full disconnect, no emails, no teams messages.
00:03:47.181 --> 00:03:56.332
And then the the third week was the time when I actually started thinking about work a little bit like, okay, I'm starting to get there.
00:03:56.332 --> 00:04:00.810
What's cooking there in the office, what's going on there, what's the next step there?
00:04:00.810 --> 00:04:06.248
So yeah, so it's a good timeline, absolutely but yeah I thoroughly enjoyed it.
00:04:06.500 --> 00:04:07.704
Yeah, really really beautiful place.
00:04:08.306 --> 00:04:10.050
I'm glad that you had a great vacation.
00:04:10.050 --> 00:04:15.031
Looking forward to speaking with you about Business Central online.
00:04:15.031 --> 00:04:17.286
You know server performance, upgrades and security.
00:04:17.286 --> 00:04:21.382
But before we do, would you mind telling everyone a little bit about yourself?
00:04:22.865 --> 00:04:24.148
Yeah, yeah, absolutely so.
00:04:24.148 --> 00:04:25.951
My name is Dmitry Chudaev.
00:04:25.951 --> 00:04:29.048
I'm a group product manager in Business Central team.
00:04:29.048 --> 00:04:46.759
I live here in Copenhagen with my family for quite some time for more than 20 years now and I'm embarrassed to mention that because all of my Danish colleagues they start asking me why don't I speak Danish to them, and, yeah, that is embarrassing.
00:04:46.759 --> 00:04:58.427
I do understand Danish, I do speak Danish, but I guess I'm too shy to use it in the daily circumstances and in my work life.
00:04:58.427 --> 00:05:20.970
I'm responsible for more of a technical part of the product, so I'm responsible for the online service, everything that happens in the online service for upgrade, availability, lifecycle of environments, things of that nature, for our server, a server runtime and for our development tools and partner experiences.
00:05:20.970 --> 00:05:26.127
So this side of the Business Central product is part of my responsibility.
00:05:26.127 --> 00:05:29.327
Yannick is my counterpart.
00:05:29.327 --> 00:05:36.708
I've seen a fantastic show with you with you, gentlemen and Yannick, so lots of great insights there.
00:05:36.708 --> 00:05:46.466
So we work together, yannick on application and client experiences, and I'm more on the online service, server and partner tooling experiences.
00:05:47.548 --> 00:05:47.911
Excellent.
00:05:47.911 --> 00:05:56.906
It must be exciting to work with the online or the architecture, the technical platform of Business Central Online.
00:05:56.906 --> 00:06:01.108
Business Central Online is taking off.
00:06:01.108 --> 00:06:02.524
The product has taken off.
00:06:02.524 --> 00:06:03.507
It's an amazing product.
00:06:03.507 --> 00:06:07.708
I've seen some great news and information released about.
00:06:07.708 --> 00:06:10.160
You know the number of you know implementations there are.
00:06:10.160 --> 00:06:14.612
I believe I thought we saw like there was 40,000 plus or something, which is just amazing.
00:06:16.362 --> 00:06:16.983
And I can't.
00:06:16.983 --> 00:06:18.987
You know, I'm happy for it.
00:06:18.987 --> 00:06:20.913
It's been my entire life and I'm happy for it.
00:06:20.913 --> 00:06:36.449
But that must present some challenges, or architectural challenges for you as well, because you have this online environment with a number of users and users using it through web application, and you must have some challenges with performance.
00:06:36.449 --> 00:06:53.990
I know that a lot of individuals have security considerations or questions about having their information in the cloud, and then also some information or questions that I hear often are also even about the upgrades the upgrades between the architectural, the technical upgrade.
00:06:53.990 --> 00:06:55.826
I don't even know how to call it these days.
00:06:55.826 --> 00:06:58.209
I guess we used to call it the platform, but I guess now it's in the cloud.
00:06:58.209 --> 00:07:09.029
I'm not really certain what you would call it, but these are quite a bit of questions that we receive and we hear, so I was hoping to have the opportunity to talk with you about them.
00:07:09.439 --> 00:07:11.809
Excellent, excellent, very, very good topics, for sure.
00:07:11.809 --> 00:07:16.110
Yes, running service at that scale is an interesting experience for sure.
00:07:16.110 --> 00:07:23.730
For sure, and you just named all the core topics that we get to deal with quite often in our daily life.
00:07:24.632 --> 00:07:31.567
It must be both a challenge as well as excitement as well for you to be able to see that it works.
00:07:31.567 --> 00:07:38.353
We'll start with kind of a small portion of with Business Central Online.
00:07:38.353 --> 00:07:45.740
Now, one of the benefits of having an online product is that you have the upgrades and the updates as they become available.
00:07:45.740 --> 00:07:59.452
And with Business Central, the application, microsoft has a schedule of two major wave releases as of this recording two major wave releases per year and then monthly updates of the application.
00:07:59.452 --> 00:08:04.564
With the platform, is there a set schedule for the platform updates?
00:08:04.564 --> 00:08:07.266
With the platform, is there a set schedule for the platform updates?
00:08:07.266 --> 00:08:11.230
Do they coincide with the application or is there a different schedule that is followed for that?
00:08:12.151 --> 00:08:15.875
Yeah, yeah, so the way it works and you're completely right.
00:08:15.875 --> 00:08:23.367
So we have specific cadence with application updates and application updates apply to specific environments.
00:08:23.367 --> 00:08:32.448
So each customer have their own environment, which is a separate database of some sort that you can imagine, and application updates applied to each of these environments.
00:08:32.448 --> 00:08:45.192
And because these updates are applied to each of these environments, we provide this functionality for the environment owner to schedule these updates so they can decide when they want to apply the application update.
00:08:45.192 --> 00:08:59.659
Now you can imagine that on the technical level, on the server level, this infrastructure, the server itself which manages all of these environments, is shared across multiple environments.
00:08:59.659 --> 00:09:01.086
It's a multi-tenant system.
00:09:01.086 --> 00:09:07.501
So it's one NST managing multiple, one server tier managing multiple customer environments.
00:09:07.501 --> 00:09:20.042
So applying hotfixes and changes to the server cannot be scheduled by each individual environment owner because I mean that's a shared infrastructure provides resources for all of these shared resources.
00:09:20.042 --> 00:09:24.027
So we use different approach to that.
00:09:24.027 --> 00:09:30.096
So application platform hotfixes are rolled out as they come.
00:09:30.096 --> 00:09:46.851
So when developers produce certain changes, there is a process where they go through certain testing in different tiers of our infrastructure, so they obviously are tested by the developers themselves in their local environment.
00:09:46.851 --> 00:09:53.393
Then we have a so-called pre-production environment where the changes can be tested as well.
00:09:53.393 --> 00:09:59.793
Then they're merged into our official production branch and then they're scheduled to be deployed into production.
00:09:59.793 --> 00:10:11.615
So these changes also go through a thing which we call safe deployment, which is a very, very important practice for all of the cloud services.
00:10:12.179 --> 00:10:15.389
The hot fixes don't go to all of the customers at the same time.
00:10:15.389 --> 00:10:18.609
They go through a set of stages.
00:10:18.609 --> 00:10:29.110
So first they get deployed to a small segment of our service, to a few customers out there in a specific region, and then we monitor the health of these environments.
00:10:29.110 --> 00:10:38.028
If anything suspicious happens in that system, we interrupt the update, we analyze the changes and we introduce new things.
00:10:38.028 --> 00:10:51.408
But if we see that everything is healthy and is proceeding as usual, then we expand the deployment to more regions and more clusters and nodes in our service, eventually deploying all of it into all of the regions.
00:10:51.408 --> 00:10:54.804
So that happens because it's a shared infrastructure.
00:10:54.804 --> 00:11:03.908
That happens typically during the night, so we will locate night hours in each of the zones where we operate.
00:11:03.908 --> 00:11:09.275
And it is a challenge because we now run in some 170 countries.
00:11:09.275 --> 00:11:17.711
Yet in each Azure region there's obviously a good time zone where very little business activity.
00:11:17.711 --> 00:11:22.071
So we apply these fault fixes during that time period.
00:11:23.280 --> 00:11:38.506
Another dimension of kind of protection which we apply to this process is that our service nodes, where hosting our customers, they obviously don't consist of a single, you know, of a single node.
00:11:38.506 --> 00:11:40.307
They consist of multiple nodes.
00:11:40.307 --> 00:11:47.321
So when we apply our hotfixes, platform hotfixes, we apply them to a specific node at the time.
00:11:47.321 --> 00:12:01.014
So we start applying the hotfixes to one NST on one node and then this NST is taken out of rotation and all of the new connections are sent to the new environments and new NSTs.
00:12:01.014 --> 00:12:06.811
So the new customers logging in into BSC they go to that part of the service.
00:12:06.811 --> 00:12:18.234
We patch and update this NST and once it is healthy and we approve and the signals are coming in green, we open it up for our load balancer to send customers there as well.
00:12:18.234 --> 00:12:23.125
So this is happening face-by-face across these NSTs.
00:12:24.005 --> 00:12:32.850
However, I also have to admit that sometimes on that specific NST there are some users, so users doing jobs even during the night.
00:12:32.850 --> 00:12:38.186
They don't get any vacations, they don't get any night times or automated processes.
00:12:38.186 --> 00:12:42.350
There's some bad jobs, web services and portals doing the job.
00:12:42.350 --> 00:12:47.107
So we give a certain period of time to kind of drain these connections.
00:12:47.107 --> 00:12:52.509
There's a notification sent to the users and to the processes that we're going to interrupt you.
00:12:52.509 --> 00:12:54.267
Please refresh your browser.
00:12:54.267 --> 00:12:58.390
And that is a signal for us applying these hot fixes.
00:12:58.390 --> 00:13:01.769
So we try to avoid the disruption as much as we can.
00:13:01.769 --> 00:13:07.087
We try to thread as safely as possible across all of these instances.
00:13:07.087 --> 00:13:09.768
But, yeah, sometimes you can get this notification.
00:13:09.768 --> 00:13:16.908
Please refresh your browser, please reconnect, and that's the most disturbance that we apply to these environments.
00:13:17.399 --> 00:13:19.089
Yeah, that's basically the screen.
00:13:19.089 --> 00:13:26.909
That is a lot, and I've seen that message before too, and now it's nice to know and have an understanding of exactly what that means.
00:13:26.909 --> 00:13:30.610
You answered so many of the questions that I had in that explanation.
00:13:30.669 --> 00:13:31.272
Thank, you for that.
00:13:31.480 --> 00:13:47.206
Because having an online application that's available 24 hours a day, seven days a week, and if you have a shared update, as you had mentioned, across time zones, I know how difficult it is trying to coordinate with individuals over time zones.
00:13:47.206 --> 00:13:58.432
With you having users, it must be a challenge, but now I see that you isolate it by region to have their nighttime to minimize the disruption, which is good.
00:13:59.981 --> 00:14:06.668
And so sometimes users can see the same message popping up oh, you need to refresh your browser.
00:14:06.668 --> 00:14:15.052
For different reasons, like it's not necessarily that when you see this message is the time when we deploy an update.
00:14:15.052 --> 00:14:27.466
It could be done for other resource governance reasons, like if that specific machine or that specific segment of our service is experiencing more than usual traffic, we try to distribute it to other machines.
00:14:27.466 --> 00:14:41.187
And that's where we start to gradually kind of close it down and inform users please refresh your session and you will be sent to another machine with plenty of resources, lots of things you can do on another place.
00:14:41.759 --> 00:14:49.865
But yes, it may come in as a destruction, coming in when it comes during the day, for example during morning hours.
00:14:49.865 --> 00:14:57.807
But during morning hours and the daytime this should not be an update.
00:14:57.807 --> 00:15:12.625
So this is something else, this is resource governance and in fact we built a special chart which we monitor very tightly the number of times this notification is showed to the users.
00:15:12.625 --> 00:15:34.220
So in the live site, periodically we analyze this chart to see if any particular segment of our service is affected by this annoying dialogues more than usual, and then we try to understand what's going on and try to kind of check whether the resource situation is okay there or whether the updates are applying okay.
00:15:34.220 --> 00:15:37.308
So we monitor this as well, very, very tightly.
00:15:37.308 --> 00:15:42.048
But yes, sometimes it's unavoidable, so we'll have to gently push.
00:15:42.921 --> 00:15:48.493
When I see this pop up now moving forward, I'll start thinking about you and your team.
00:15:48.493 --> 00:15:50.187
Now it's like, oh, they must be doing something.
00:15:50.759 --> 00:16:09.711
Yeah, they see your blip on the chart, Like that's Christopher refreshing his session and also depending upon the time of the day, which also leads to another interesting point that you were talking about, where you may receive that notification if there's a lot of activity on a server or a service tier.
00:16:10.413 --> 00:16:14.869
For the sake of this conversation, I'll refer to it as the service tier performance.
00:16:14.869 --> 00:16:29.325
All right, so now that I mentioned you had you had mentioned that you may get this notification because there's a lot of activity on a particular service tier and you need to balance the load to ensure optimal performance for the users of the application.
00:16:29.325 --> 00:16:47.533
When talking with potential customers, prospects or customers who are looking to move from an earlier version of Dynamics Nav or even from an on-premise version of Business Central, a lot of times the topic of performance comes into play.
00:16:47.533 --> 00:16:53.089
Performance is always going to be, you know, a challenge or a topic, because there are many facets to performance.
00:16:53.089 --> 00:16:55.227
So let's talk about all things being equal.
00:16:55.227 --> 00:17:01.908
Take out any potential issues with coding or from the application side, right, because those sometimes could cause performance issues.
00:17:03.523 --> 00:17:15.130
From the platform side, or from the server side, the NST side, what considerations are in place for performance to allow for optimal use for a particular customer or user?
00:17:15.130 --> 00:17:19.310
And also, in the conversation we talked about how there is a shared environment.
00:17:19.310 --> 00:17:23.593
So with the shared environment, we can have many companies accessing that at the time of day.
00:17:23.593 --> 00:17:42.761
Um, so with the shared environment, we can have many companies, uh, accessing that at the time of day I may be a distributor and I need to have a high volume of transactions towards the end of the day because I need to fulfill my shipments, to get the trucks loaded in my packages out, and another retailer during a holiday season may have influxes during you know, uh, a time period.
00:17:42.761 --> 00:17:45.869
Uh, that's, um, you know, through a seasonal time period.
00:17:45.869 --> 00:17:58.512
Excuse me, what considerations or how do you address the performance when you have large loads coming at the NST in these shared areas?
00:17:59.173 --> 00:18:11.028
Yeah, yeah, yeah, very excellent question and yeah, we get to discuss this a lot and there's always a balance between performance and throughput, so these two topics come very closely together.
00:18:11.028 --> 00:18:16.020
What's the performance of Business Central at scale and how much throughput we can push through?
00:18:16.020 --> 00:18:17.949
Business Central at scale?
00:18:17.949 --> 00:18:21.348
And performance is an interesting beast.
00:18:21.348 --> 00:18:32.568
Very early on, when we just started building an online service, we understood that performance is going to be a mutual responsibility.
00:18:33.279 --> 00:18:48.035
I mean, I've also seen many fantastic webcasts from you gentlemen about performance and how much it is important to keep your code in a good shape and to use all of the tools which we provide to monitor performance.
00:18:48.035 --> 00:19:01.971
We provide many telemetry signals to understand where the bottlenecks may be in the code, in web service calls, in AL code, maybe there's some locking happening too much in specific tables.
00:19:01.971 --> 00:19:13.044
So we try to build a lot of tools for partners to understand where on which side of the performance stack, the problem may occur.
00:19:13.044 --> 00:19:36.652
So now you would like us to focus on kind of the resource governance part of this, because all of the other aspects were mentioned, but I would also want to sort of lean in just a little bit there, remind everyone that we did provide a lot of tools, fantastic tools to understand what is causing these issues.
00:19:36.652 --> 00:19:49.279
So there's an inclined performance profile at which you can run and see where the time is spent in certain process so you can understand whether a certain extension or certain piece of code or update changed the behavior.
00:19:49.279 --> 00:20:03.153
So I do want to kind of stress that performance is a multifaceted area and we take care of the resource governance part of it.
00:20:03.153 --> 00:20:15.685
Our goal and sole purpose of existence, work, life maybe there are a few other purposes, but our goal is to provide enough resources for all of these workloads.
00:20:15.685 --> 00:20:30.085
So, yes, so, while partner's responsibility and customer's responsibility to kind of keep the code sane, what we do, we designed the system in a way that it allows for scalability at many different layers.
00:20:30.085 --> 00:20:42.380
So the scalability bottlenecks may come, which has kind of presented itself in performance, may come from different places.
00:20:42.380 --> 00:20:44.327
So there's a scalability of database.
00:20:44.327 --> 00:20:53.030
So the database simply cannot cope with that many requests coming, for example, from a web store, from e-commerce solution.
00:20:53.030 --> 00:21:02.029
So there is a scalability of compute and scalability like the traffic which is going between these systems.
00:21:02.029 --> 00:21:07.550
So there's many aspects and on each of this level we build automatic scaling system.
00:21:09.521 --> 00:21:15.114
So for database scalability we use a system of tiers.
00:21:15.114 --> 00:21:32.036
So there are several tiers in our infrastructure which we use to kind of move the database between these tiers as it exhausts its limits in the specific tier.
00:21:32.036 --> 00:21:35.690
So what happens is that this system is fully automated.
00:21:35.690 --> 00:21:40.271
There's no way any human being is capable of monitoring this in real time.
00:21:40.271 --> 00:21:47.240
There is automation which is monitoring each and every environment time.
00:21:47.240 --> 00:21:52.921
There is automation which is monitoring each and every environment and it tries to understand whether this environment is getting close to the limits of what this database can handle.
00:21:52.921 --> 00:21:58.733
So not when it crosses these limits, but when it's getting close to these limits.
00:21:58.733 --> 00:22:05.713
So when we detect this moment of time, we take this database and move it automatically into another tier.
00:22:05.713 --> 00:22:12.391
So it gets moved into a quieter place, into a place with more resources.
00:22:12.391 --> 00:22:14.054
It scales as well.
00:22:14.054 --> 00:22:16.224
Azure SQL has many, many different tiers.
00:22:16.224 --> 00:22:27.119
Azure Elastic Pools, which we also use on the back end, also have a lot of configuration settings to define how much capacity you want to allocate to each environment.
00:22:27.119 --> 00:22:38.476
So your database goes into another tier automatically and by that you get more throughput and thereby more performance for your processes.
00:22:39.881 --> 00:22:43.210
Now, so that is the database situation.
00:22:43.210 --> 00:22:47.009
The same happens for the compute capacity.
00:22:47.009 --> 00:22:55.592
You said correctly that the compute is shared, so many environments using compute on our service nodes.
00:22:55.592 --> 00:23:18.194
So when we see that the traffic is approaching some limits of CPU and other capabilities of this node which are about to be uncomfortable, we start scaling out the service to provide more of these resources and we stop sending sessions to this segment of the service.
00:23:18.194 --> 00:23:23.268
So all of the new connections go to the new services, the new services.
00:23:23.288 --> 00:23:46.775
So whenever you experience this slowness and something which is maybe caused by the resources like in the worst case, refreshing your browser, trying to kind of hard refresh your browser, close, reopen, so that should automatically redirect your session to another machine compute-wise.
00:23:46.775 --> 00:23:49.528
So that's another good advice.
00:23:49.528 --> 00:23:51.887
But all of it is happening automatically.
00:23:51.887 --> 00:23:58.983
We kind of redirect resources to machines with enough capacity and to database and pools with enough capacity.
00:23:58.983 --> 00:24:22.888
And also I wanted to say that, looking at our KPIs, so we try to measure how long time each database spends on, or each user or each session spends on the machine with insufficient capacity, how long time users are suffering, and that percentage of time is very, very small.
00:24:22.888 --> 00:24:31.560
So we are in 99.9x of sending sessions to the machines with enough capacity.
00:24:32.405 --> 00:24:37.417
And what I'm trying to say by that is that when the theme comes to the performance and the throughput.
00:24:37.417 --> 00:24:44.233
It's rarely caused by insufficient CPU memory and database throughput.
00:24:44.233 --> 00:24:47.799
It's quite often in some other segments.
00:24:47.799 --> 00:24:51.365
Insufficient CPU memory and database throughput, it's quite often in some other segments.
00:24:51.365 --> 00:24:59.548
So the combination of database locking, extensions too many instructions issued at the same time.
00:24:59.548 --> 00:25:01.930
Sometimes it is throttling as well.
00:25:01.930 --> 00:25:12.976
So you kind of send so many signals to Business Central that at some point we start throttling and capping this kind of influx of requests.
00:25:13.536 --> 00:25:16.397
That was the question that I had, if there was a ceiling.
00:25:16.397 --> 00:25:30.346
We talked about the scaling of performance and being able to work with processing and CPU and then also with the ability to move the database, and I do.
00:25:30.346 --> 00:25:31.209
I'll reiterate what you said is before.
00:25:31.209 --> 00:25:46.597
That's what I was trying to say at the beginning is is there are application considerations to performance and I can say from a lot of times I get a lot of performance issues and sometimes it could be, as you had mentioned, multiple extensions that are installed that may be competing with each other, or even if somebody had created some code that may not be the most efficient.
00:25:46.597 --> 00:25:55.796
You know, even if I put something in there and tell it to wait a minute before it does the next process, a user may feel that it's slow performing, when in reality it was.
00:25:55.796 --> 00:25:56.597
It was written that way.
00:25:57.266 --> 00:26:06.367
And you mentioned the performance, the incline performance analyzer, which I think I did see in 2024, wave two, is going to also have some enhancements.
00:26:06.367 --> 00:26:09.076
I read the notes last week because I'm excited about that.
00:26:09.076 --> 00:26:19.391
I do use that regularly as well because it is a good tool to help pinpoint from the application side the amount of time that's spent in certain areas, to help you isolate your code.
00:26:19.391 --> 00:26:22.077
So I did, taking the code piece into consideration.
00:26:22.077 --> 00:26:23.280
That's where I was wondering.
00:26:23.280 --> 00:26:45.486
Taking the code piece into consideration, that's where I was wondering if there was a cap, because if someone does create an extension that could impact performance, as you had mentioned, maybe just send, you know, an over abundant amount of requests, where is that cap that it would actually now say, okay, well, you can't you know you don't have an infinite pool of resources, right?
00:26:45.566 --> 00:26:52.694
I mean theoretically, within Azure and an online environment, it's supposed to scale up to give you the resources adequate for you to perform your functions.
00:26:52.694 --> 00:27:03.353
But if there is some incorrectness or something going on, that's, you know, inundating or creating excessive traffic, how do you determine the ceiling of that?
00:27:04.074 --> 00:27:04.315
Yeah.
00:27:04.315 --> 00:27:15.737
So very, very good question and I think, like I mentioned, our goal and aspiration and the whole team is kind of rallying behind that is to provide enough resources to everyone.
00:27:15.737 --> 00:27:18.006
I mean, this is the sole purpose of the online service.
00:27:18.006 --> 00:27:20.352
You cannot starve on resources.
00:27:20.352 --> 00:27:27.769
So a lot of efforts were put into place to kind of automate this process and make sure that it doesn't happen.
00:27:27.769 --> 00:27:34.299
But for some scenarios we wanted to introduce a reasonable ceiling.
00:27:34.299 --> 00:27:57.499
So, for example, for web service requests due to just heavy workloads, like extremely heavy workloads or a programming mistake or inefficient code in this web service request, you may start consuming unusually high number of resources in Business Central.
00:27:57.499 --> 00:28:07.657
So what we apply here is a throttling limit which I believe is 6,000 requests per five-minute sliding window.
00:28:07.657 --> 00:28:14.617
So five-minute sliding window if you issue more than 6,000 requests, we start throttling them.
00:28:14.617 --> 00:28:16.491
So that's for web service requests.
00:28:17.244 --> 00:28:23.939
And the way we arrived to that number is we kind of went through the same safe rollout process.
00:28:23.939 --> 00:28:26.704
We kind of went through the same safe rollout process.
00:28:26.704 --> 00:28:31.977
So we introduced the measurements in our system to understand how much throughput different workloads require.
00:28:31.977 --> 00:28:38.092
So we monitored the system for a very, very long period of time I would say even more than a year.
00:28:38.092 --> 00:28:56.525
So more than a year we were looking at how much resources and how many requests customers are sending to us and then we collected all of this telemetry and then we looked at the peaks, like what is the throughput that they actually use, and then we almost doubled it generally.
00:28:57.446 --> 00:29:18.730
So we try to be super generous in this throttling threshold to make sure that in this throttling threshold, to make sure that going to these limits it really is something where it's either by mistake or something unusually high load coming from some e-commerce solution or some reporting solution.
00:29:18.730 --> 00:29:33.993
So that's how these limits were defined by us looking at telemetry, trying to see even the heaviest workloads and putting these thresholds even above these heaviest workloads so they should be sufficient for the vast majority of our customers.