Mobile Monitoring Solutions

Search
Close this search box.

Nordea Investment Management AB Purchases 308 Shares of MongoDB, Inc. (NASDAQ:MDB)

MMS Founder
MMS RSS

Posted on mongodb google news. Visit mongodb google news

Nordea Investment Management AB increased its holdings in MongoDB, Inc. (NASDAQ:MDBFree Report) by 7.0% during the third quarter, Holdings Channel.com reports. The firm owned 4,685 shares of the company’s stock after acquiring an additional 308 shares during the quarter. Nordea Investment Management AB’s holdings in MongoDB were worth $1,669,000 at the end of the most recent quarter.

Several other hedge funds have also added to or reduced their stakes in MDB. KB Financial Partners LLC bought a new stake in MongoDB in the second quarter valued at approximately $27,000. Bessemer Group Inc. bought a new stake in MongoDB during the 4th quarter valued at $29,000. BluePath Capital Management LLC bought a new stake in MongoDB during the 3rd quarter valued at $30,000. Cullen Frost Bankers Inc. purchased a new stake in MongoDB during the 3rd quarter valued at $35,000. Finally, AM Squared Ltd bought a new stake in MongoDB in the 3rd quarter worth $35,000. 88.89% of the stock is owned by institutional investors.

Wall Street Analysts Forecast Growth

A number of analysts have recently weighed in on the stock. Barclays increased their target price on shares of MongoDB from $470.00 to $478.00 and gave the stock an “overweight” rating in a report on Wednesday, December 6th. DA Davidson reiterated a “neutral” rating and issued a $405.00 price objective on shares of MongoDB in a research report on Friday, January 26th. Truist Financial upped their target price on MongoDB from $440.00 to $500.00 and gave the company a “buy” rating in a report on Tuesday, February 20th. TheStreet upgraded shares of MongoDB from a “d+” rating to a “c-” rating in a report on Friday, December 1st. Finally, Needham & Company LLC restated a “buy” rating and issued a $495.00 price objective on shares of MongoDB in a report on Wednesday, January 17th. One investment analyst has rated the stock with a sell rating, four have given a hold rating and twenty have assigned a buy rating to the company. According to data from MarketBeat.com, MongoDB currently has a consensus rating of “Moderate Buy” and a consensus target price of $435.68.

Read Our Latest Stock Report on MongoDB

Insiders Place Their Bets

In other news, CFO Michael Lawrence Gordon sold 10,000 shares of the company’s stock in a transaction on Thursday, February 8th. The stock was sold at an average price of $469.84, for a total transaction of $4,698,400.00. Following the transaction, the chief financial officer now directly owns 70,985 shares of the company’s stock, valued at $33,351,592.40. The sale was disclosed in a filing with the SEC, which is available at the SEC website. In related news, CFO Michael Lawrence Gordon sold 10,000 shares of the firm’s stock in a transaction that occurred on Thursday, February 8th. The shares were sold at an average price of $469.84, for a total value of $4,698,400.00. Following the sale, the chief financial officer now owns 70,985 shares in the company, valued at $33,351,592.40. The sale was disclosed in a filing with the Securities & Exchange Commission, which is available at the SEC website. Also, Director Dwight A. Merriman sold 2,000 shares of the business’s stock in a transaction on Thursday, February 8th. The shares were sold at an average price of $465.37, for a total transaction of $930,740.00. Following the sale, the director now owns 1,166,784 shares of the company’s stock, valued at $542,986,270.08. The disclosure for this sale can be found here. In the last quarter, insiders sold 62,184 shares of company stock valued at $26,222,860. Corporate insiders own 4.80% of the company’s stock.

MongoDB Stock Up 0.3 %

Shares of MDB stock opened at $451.52 on Friday. The company has a debt-to-equity ratio of 1.18, a current ratio of 4.74 and a quick ratio of 4.74. MongoDB, Inc. has a one year low of $189.59 and a one year high of $509.62. The company’s 50-day moving average is $419.57 and its 200 day moving average is $386.98.

MongoDB (NASDAQ:MDBGet Free Report) last posted its quarterly earnings results on Tuesday, December 5th. The company reported $0.96 EPS for the quarter, beating analysts’ consensus estimates of $0.51 by $0.45. MongoDB had a negative net margin of 11.70% and a negative return on equity of 20.64%. The firm had revenue of $432.94 million for the quarter, compared to analysts’ expectations of $406.33 million. During the same quarter in the prior year, the company posted ($1.23) earnings per share. The business’s revenue for the quarter was up 29.8% on a year-over-year basis. Sell-side analysts forecast that MongoDB, Inc. will post -1.63 earnings per share for the current fiscal year.

MongoDB Company Profile

(Free Report)

MongoDB, Inc provides general purpose database platform worldwide. The company offers MongoDB Atlas, a hosted multi-cloud database-as-a-service solution; MongoDB Enterprise Advanced, a commercial database server for enterprise customers to run in the cloud, on-premise, or in a hybrid environment; and Community Server, a free-to-download version of its database, which includes the functionality that developers need to get started with MongoDB.

See Also

Want to see what other hedge funds are holding MDB? Visit HoldingsChannel.com to get the latest 13F filings and insider trades for MongoDB, Inc. (NASDAQ:MDBFree Report).

Institutional Ownership by Quarter for MongoDB (NASDAQ:MDB)

Receive News & Ratings for MongoDB Daily – Enter your email address below to receive a concise daily summary of the latest news and analysts’ ratings for MongoDB and related companies with MarketBeat.com’s FREE daily email newsletter.

Article originally posted on mongodb google news. Visit mongodb google news

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


Janney Montgomery Scott LLC Sells 185 Shares of MongoDB, Inc. (NASDAQ:MDB)

MMS Founder
MMS RSS

Posted on mongodb google news. Visit mongodb google news

Janney Montgomery Scott LLC trimmed its holdings in shares of MongoDB, Inc. (NASDAQ:MDBFree Report) by 10.0% in the third quarter, Holdings Channel.com reports. The firm owned 1,665 shares of the company’s stock after selling 185 shares during the quarter. Janney Montgomery Scott LLC’s holdings in MongoDB were worth $576,000 as of its most recent SEC filing.

Other large investors have also bought and sold shares of the company. Raymond James & Associates grew its stake in shares of MongoDB by 32.0% during the 1st quarter. Raymond James & Associates now owns 4,922 shares of the company’s stock worth $2,183,000 after acquiring an additional 1,192 shares in the last quarter. PNC Financial Services Group Inc. grew its stake in shares of MongoDB by 19.1% during the 1st quarter. PNC Financial Services Group Inc. now owns 1,282 shares of the company’s stock worth $569,000 after acquiring an additional 206 shares in the last quarter. MetLife Investment Management LLC bought a new position in shares of MongoDB during the 1st quarter worth approximately $1,823,000. Panagora Asset Management Inc. grew its stake in shares of MongoDB by 9.8% during the 1st quarter. Panagora Asset Management Inc. now owns 1,977 shares of the company’s stock worth $877,000 after acquiring an additional 176 shares in the last quarter. Finally, Vontobel Holding Ltd. grew its stake in shares of MongoDB by 100.3% during the 1st quarter. Vontobel Holding Ltd. now owns 2,873 shares of the company’s stock worth $1,236,000 after acquiring an additional 1,439 shares in the last quarter. 88.89% of the stock is owned by institutional investors.

Insider Buying and Selling

In related news, CFO Michael Lawrence Gordon sold 7,577 shares of the firm’s stock in a transaction on Monday, November 27th. The stock was sold at an average price of $410.03, for a total value of $3,106,797.31. Following the transaction, the chief financial officer now owns 89,027 shares in the company, valued at $36,503,740.81. The sale was disclosed in a document filed with the Securities & Exchange Commission, which can be accessed through the SEC website. In other MongoDB news, CFO Michael Lawrence Gordon sold 7,577 shares of MongoDB stock in a transaction dated Monday, November 27th. The stock was sold at an average price of $410.03, for a total value of $3,106,797.31. Following the transaction, the chief financial officer now owns 89,027 shares in the company, valued at $36,503,740.81. The transaction was disclosed in a document filed with the SEC, which is accessible through this hyperlink. Also, Director Dwight A. Merriman sold 2,000 shares of MongoDB stock in a transaction dated Thursday, February 8th. The shares were sold at an average price of $465.37, for a total value of $930,740.00. Following the completion of the transaction, the director now owns 1,166,784 shares in the company, valued at approximately $542,986,270.08. The disclosure for this sale can be found here. Over the last quarter, insiders have sold 62,184 shares of company stock worth $26,222,860. Company insiders own 4.80% of the company’s stock.

MongoDB Stock Up 0.3 %

MDB opened at $451.52 on Friday. MongoDB, Inc. has a fifty-two week low of $189.59 and a fifty-two week high of $509.62. The company has a debt-to-equity ratio of 1.18, a quick ratio of 4.74 and a current ratio of 4.74. The company has a market capitalization of $32.59 billion, a P/E ratio of -171.03 and a beta of 1.24. The stock has a fifty day moving average of $419.57 and a 200-day moving average of $386.98.

MongoDB (NASDAQ:MDBGet Free Report) last issued its quarterly earnings results on Tuesday, December 5th. The company reported $0.96 EPS for the quarter, topping analysts’ consensus estimates of $0.51 by $0.45. MongoDB had a negative return on equity of 20.64% and a negative net margin of 11.70%. The company had revenue of $432.94 million for the quarter, compared to analysts’ expectations of $406.33 million. During the same quarter last year, the business earned ($1.23) earnings per share. MongoDB’s revenue was up 29.8% on a year-over-year basis. On average, equities analysts expect that MongoDB, Inc. will post -1.63 EPS for the current year.

Analysts Set New Price Targets

Several equities analysts have recently weighed in on MDB shares. DA Davidson reaffirmed a “neutral” rating and set a $405.00 price target on shares of MongoDB in a research note on Friday, January 26th. Capital One Financial raised MongoDB from an “equal weight” rating to an “overweight” rating and set a $427.00 price objective for the company in a report on Wednesday, November 8th. TheStreet raised MongoDB from a “d+” rating to a “c-” rating in a report on Friday, December 1st. KeyCorp increased their price objective on MongoDB from $500.00 to $543.00 and gave the company an “overweight” rating in a report on Wednesday, February 14th. Finally, Royal Bank of Canada increased their price objective on MongoDB from $445.00 to $475.00 and gave the company an “outperform” rating in a report on Wednesday, December 6th. One investment analyst has rated the stock with a sell rating, four have issued a hold rating and twenty have issued a buy rating to the company. Based on data from MarketBeat.com, the stock has an average rating of “Moderate Buy” and an average price target of $435.68.

View Our Latest Research Report on MDB

MongoDB Profile

(Free Report)

MongoDB, Inc provides general purpose database platform worldwide. The company offers MongoDB Atlas, a hosted multi-cloud database-as-a-service solution; MongoDB Enterprise Advanced, a commercial database server for enterprise customers to run in the cloud, on-premise, or in a hybrid environment; and Community Server, a free-to-download version of its database, which includes the functionality that developers need to get started with MongoDB.

Featured Articles

Want to see what other hedge funds are holding MDB? Visit HoldingsChannel.com to get the latest 13F filings and insider trades for MongoDB, Inc. (NASDAQ:MDBFree Report).

Institutional Ownership by Quarter for MongoDB (NASDAQ:MDB)

Receive News & Ratings for MongoDB Daily – Enter your email address below to receive a concise daily summary of the latest news and analysts’ ratings for MongoDB and related companies with MarketBeat.com’s FREE daily email newsletter.

Article originally posted on mongodb google news. Visit mongodb google news

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


Nordea Investment Management AB Grows Holdings in MongoDB, Inc. (NASDAQ:MDB)

MMS Founder
MMS RSS

Posted on mongodb google news. Visit mongodb google news

Nordea Investment Management AB increased its holdings in MongoDB, Inc. (NASDAQ:MDBFree Report) by 7.0% in the third quarter, according to its most recent 13F filing with the Securities and Exchange Commission (SEC). The institutional investor owned 4,685 shares of the company’s stock after buying an additional 308 shares during the quarter. Nordea Investment Management AB’s holdings in MongoDB were worth $1,669,000 at the end of the most recent reporting period.

Several other large investors have also recently added to or reduced their stakes in the business. Jennison Associates LLC increased its position in shares of MongoDB by 87.8% during the 3rd quarter. Jennison Associates LLC now owns 3,733,964 shares of the company’s stock valued at $1,291,429,000 after purchasing an additional 1,745,231 shares during the period. 1832 Asset Management L.P. grew its holdings in MongoDB by 3,283,771.0% during the fourth quarter. 1832 Asset Management L.P. now owns 1,018,000 shares of the company’s stock worth $200,383,000 after acquiring an additional 1,017,969 shares during the period. Norges Bank bought a new stake in MongoDB in the fourth quarter worth about $147,735,000. T. Rowe Price Investment Management Inc. lifted its holdings in MongoDB by 77.4% in the 4th quarter. T. Rowe Price Investment Management Inc. now owns 568,803 shares of the company’s stock valued at $111,964,000 after acquiring an additional 248,133 shares during the last quarter. Finally, Dorsal Capital Management LLC boosted its position in shares of MongoDB by 100.0% during the 4th quarter. Dorsal Capital Management LLC now owns 400,000 shares of the company’s stock valued at $78,736,000 after purchasing an additional 200,000 shares in the last quarter. 88.89% of the stock is currently owned by institutional investors and hedge funds.

MongoDB Trading Up 0.3 %

Shares of MongoDB stock opened at $451.52 on Friday. MongoDB, Inc. has a 1 year low of $189.59 and a 1 year high of $509.62. The company’s fifty day simple moving average is $419.57 and its 200-day simple moving average is $386.98. The company has a debt-to-equity ratio of 1.18, a quick ratio of 4.74 and a current ratio of 4.74.

MongoDB (NASDAQ:MDBGet Free Report) last posted its quarterly earnings results on Tuesday, December 5th. The company reported $0.96 EPS for the quarter, beating the consensus estimate of $0.51 by $0.45. MongoDB had a negative return on equity of 20.64% and a negative net margin of 11.70%. The firm had revenue of $432.94 million during the quarter, compared to analysts’ expectations of $406.33 million. During the same quarter in the prior year, the firm posted ($1.23) EPS. The company’s revenue for the quarter was up 29.8% on a year-over-year basis. As a group, sell-side analysts expect that MongoDB, Inc. will post -1.63 earnings per share for the current fiscal year.

Insider Transactions at MongoDB

In other MongoDB news, Director Dwight A. Merriman sold 1,000 shares of the firm’s stock in a transaction dated Monday, January 22nd. The shares were sold at an average price of $420.00, for a total transaction of $420,000.00. Following the completion of the transaction, the director now owns 528,896 shares in the company, valued at $222,136,320. The sale was disclosed in a filing with the SEC, which can be accessed through the SEC website. In other news, CFO Michael Lawrence Gordon sold 10,000 shares of the firm’s stock in a transaction on Thursday, February 8th. The stock was sold at an average price of $469.84, for a total value of $4,698,400.00. Following the completion of the sale, the chief financial officer now directly owns 70,985 shares in the company, valued at $33,351,592.40. The sale was disclosed in a filing with the SEC, which is accessible through this link. Also, Director Dwight A. Merriman sold 1,000 shares of the firm’s stock in a transaction that occurred on Monday, January 22nd. The shares were sold at an average price of $420.00, for a total transaction of $420,000.00. Following the completion of the sale, the director now directly owns 528,896 shares of the company’s stock, valued at approximately $222,136,320. The disclosure for this sale can be found here. In the last three months, insiders sold 62,184 shares of company stock valued at $26,222,860. Company insiders own 4.80% of the company’s stock.

Analyst Upgrades and Downgrades

A number of brokerages recently weighed in on MDB. Truist Financial raised their target price on shares of MongoDB from $440.00 to $500.00 and gave the stock a “buy” rating in a report on Tuesday, February 20th. Needham & Company LLC restated a “buy” rating and issued a $495.00 target price on shares of MongoDB in a report on Wednesday, January 17th. TheStreet raised MongoDB from a “d+” rating to a “c-” rating in a report on Friday, December 1st. KeyCorp lifted their price target on MongoDB from $500.00 to $543.00 and gave the stock an “overweight” rating in a research note on Wednesday, February 14th. Finally, DA Davidson reaffirmed a “neutral” rating and set a $405.00 price objective on shares of MongoDB in a research note on Friday, January 26th. One equities research analyst has rated the stock with a sell rating, four have given a hold rating and twenty have issued a buy rating to the company’s stock. According to MarketBeat.com, the stock currently has a consensus rating of “Moderate Buy” and an average price target of $435.68.

View Our Latest Research Report on MDB

MongoDB Company Profile

(Free Report)

MongoDB, Inc provides general purpose database platform worldwide. The company offers MongoDB Atlas, a hosted multi-cloud database-as-a-service solution; MongoDB Enterprise Advanced, a commercial database server for enterprise customers to run in the cloud, on-premise, or in a hybrid environment; and Community Server, a free-to-download version of its database, which includes the functionality that developers need to get started with MongoDB.

See Also

Institutional Ownership by Quarter for MongoDB (NASDAQ:MDB)



Receive News & Ratings for MongoDB Daily – Enter your email address below to receive a concise daily summary of the latest news and analysts’ ratings for MongoDB and related companies with MarketBeat.com’s FREE daily email newsletter.

Article originally posted on mongodb google news. Visit mongodb google news

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


MongoDB, Inc. (NASDAQ:MDB) Shares Acquired by Nordea Investment Management AB

MMS Founder
MMS RSS

Posted on mongodb google news. Visit mongodb google news

Nordea Investment Management AB grew its stake in MongoDB, Inc. (NASDAQ:MDBFree Report) by 7.0% during the third quarter, according to the company in its most recent 13F filing with the SEC. The institutional investor owned 4,685 shares of the company’s stock after purchasing an additional 308 shares during the quarter. Nordea Investment Management AB’s holdings in MongoDB were worth $1,669,000 as of its most recent filing with the SEC.

Other large investors have also modified their holdings of the company. KB Financial Partners LLC bought a new position in MongoDB during the 2nd quarter worth approximately $27,000. Bessemer Group Inc. bought a new position in MongoDB during the fourth quarter worth $29,000. BluePath Capital Management LLC acquired a new position in MongoDB in the third quarter worth $30,000. Cullen Frost Bankers Inc. bought a new stake in MongoDB during the third quarter valued at $35,000. Finally, AM Squared Ltd acquired a new stake in shares of MongoDB during the third quarter worth $35,000. Institutional investors own 88.89% of the company’s stock.

Insiders Place Their Bets

In other news, CFO Michael Lawrence Gordon sold 10,000 shares of the business’s stock in a transaction on Thursday, February 8th. The shares were sold at an average price of $469.84, for a total transaction of $4,698,400.00. Following the transaction, the chief financial officer now directly owns 70,985 shares in the company, valued at approximately $33,351,592.40. The transaction was disclosed in a filing with the SEC, which is available at this hyperlink. In other news, Director Dwight A. Merriman sold 2,000 shares of the stock in a transaction on Thursday, February 8th. The shares were sold at an average price of $465.37, for a total transaction of $930,740.00. Following the transaction, the director now owns 1,166,784 shares in the company, valued at approximately $542,986,270.08. The sale was disclosed in a document filed with the SEC, which is accessible through the SEC website. Also, CFO Michael Lawrence Gordon sold 10,000 shares of MongoDB stock in a transaction on Thursday, February 8th. The shares were sold at an average price of $469.84, for a total transaction of $4,698,400.00. Following the completion of the sale, the chief financial officer now directly owns 70,985 shares of the company’s stock, valued at approximately $33,351,592.40. The disclosure for this sale can be found here. Insiders sold a total of 62,184 shares of company stock worth $26,222,860 in the last quarter. 4.80% of the stock is currently owned by corporate insiders.

Analyst Upgrades and Downgrades

A number of brokerages recently commented on MDB. TheStreet upgraded MongoDB from a “d+” rating to a “c-” rating in a research note on Friday, December 1st. DA Davidson reissued a “neutral” rating and set a $405.00 price target on shares of MongoDB in a report on Friday, January 26th. Capital One Financial raised shares of MongoDB from an “equal weight” rating to an “overweight” rating and set a $427.00 price objective for the company in a report on Wednesday, November 8th. Mizuho raised their target price on shares of MongoDB from $330.00 to $420.00 and gave the company a “neutral” rating in a research note on Wednesday, December 6th. Finally, Wells Fargo & Company assumed coverage on shares of MongoDB in a research note on Thursday, November 16th. They issued an “overweight” rating and a $500.00 price target for the company. One investment analyst has rated the stock with a sell rating, four have issued a hold rating and twenty have given a buy rating to the company. According to MarketBeat.com, MongoDB has an average rating of “Moderate Buy” and a consensus price target of $435.68.

Read Our Latest Research Report on MDB

MongoDB Trading Up 0.3 %

Shares of MongoDB stock opened at $451.52 on Friday. MongoDB, Inc. has a 12 month low of $189.59 and a 12 month high of $509.62. The company has a quick ratio of 4.74, a current ratio of 4.74 and a debt-to-equity ratio of 1.18. The business has a fifty day simple moving average of $419.57 and a 200-day simple moving average of $386.98.

MongoDB (NASDAQ:MDBGet Free Report) last announced its quarterly earnings data on Tuesday, December 5th. The company reported $0.96 EPS for the quarter, topping analysts’ consensus estimates of $0.51 by $0.45. The firm had revenue of $432.94 million during the quarter, compared to analyst estimates of $406.33 million. MongoDB had a negative return on equity of 20.64% and a negative net margin of 11.70%. The business’s quarterly revenue was up 29.8% compared to the same quarter last year. During the same period last year, the company posted ($1.23) EPS. Equities analysts predict that MongoDB, Inc. will post -1.63 earnings per share for the current fiscal year.

MongoDB Profile

(Free Report)

MongoDB, Inc provides general purpose database platform worldwide. The company offers MongoDB Atlas, a hosted multi-cloud database-as-a-service solution; MongoDB Enterprise Advanced, a commercial database server for enterprise customers to run in the cloud, on-premise, or in a hybrid environment; and Community Server, a free-to-download version of its database, which includes the functionality that developers need to get started with MongoDB.

See Also

Institutional Ownership by Quarter for MongoDB (NASDAQ:MDB)



Receive News & Ratings for MongoDB Daily – Enter your email address below to receive a concise daily summary of the latest news and analysts’ ratings for MongoDB and related companies with MarketBeat.com’s FREE daily email newsletter.

Article originally posted on mongodb google news. Visit mongodb google news

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


Swift OpenAPI Generator Reaches 1.0

MMS Founder
MMS Sergio De Simone

Article originally posted on InfoQ. Visit InfoQ

Open-sourced six months ago, the Swift OpenAPI Generator is now stable. Version 1.0 brings new features and a simplified API.

The Swift OpenAPI Generator is an open-source Swift package plugin that can be used to automatically generate the code required to access or implement HTTP endpoints described using OpenAPI. The plugin can be run at build-time, thus ensuring the generated code is always up-to-date with the latest OpenAPI description of the API, and is able to generate code to make API calls as well as stubs to integrate with the corresponding server-side services.

Among the new features brought by release 1.0 are the adoption of AsyncSequence to enable JSON event streams and large payloads without buffering; support for type-safe common content types, including JSON, multipart, URL-encoded, etc; and better decoupling of generated code thanks to flexible abstractions on client- and server-side.

On the client-side, the Swift OpenAPI Generator creates classes that can work with any HTTP framework supporting the ClientTransport protocol. On the server-side, any web framework conforming to the ServerTransport protocol is compatible with it.

While striving to ensure API stability, chances are that after revising an OpenAPI specification, the generated code will break your program and you will need to fix its usage. This may affect both client- and server-side code.

Generally speaking, when you modify an OpenAPI doc to add a new response, add a new content type, remove a required property, or rename a schema, your Swift code will require changes to work with newly generated code.

For example, when adding a new response to an existing operation, or a new content type to an existing response, the Swift OpenAPI Generator will create a new enum case to handle that. This means all switch statements using that enum will need to explicitly address that new case to pass the compiler check, unless they implement a default case. Of course, a default case will make sure your program will not break at compile time but this does not necessarily mean it will produce the correct outcome.

A somewhat different case is when adding a new property to an existing schema. This kind of change will be non-breaking if your code does not capture the init method signature for the corresponding struct, which necessarily changes to account for the new property. As a general rule, you should never include the generated code, which includes schema initializers, in your public APIs.

The Swift OpenAPI Generator 1.0 is compatible with OpenAPI 3.0 and 3.1 specifications and can be available on the Swift Package Index.

About the Author

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


Presentation: Designing Fault-Tolerant Software with Control System Transparency

MMS Founder
MMS Jon Moore

Article originally posted on InfoQ. Visit InfoQ

Transcript

Moore: My name is Jon Moore. I’m a software engineer at Stripe. We’re very proud of the fact that over 99.999% of requests to our API get processed successfully. We spend a lot of time thinking about reliability. What I’d like to do for you is to bring some perspectives on reliability and fault tolerance, maybe from an industry that is a little outside of our day-to-day. Does anyone recognize this? Voyager 2. This is the deep space probe, still in service after 46 years after launch. This made the news a little earlier this year, because someone accidentally sent a command to it that pointed its antenna away from Earth, so it couldn’t actually receive additional commands. Ingenious operators, and we all know that ingenious operators are always there to save the day for our complex systems. They figured out how to put a bunch of transmitters together and they shouted, is how I heard it described. They got back in touch with it, and they got it repointed. What I found really interesting was that if that hadn’t worked, sometime this month, here, in the month of October, there was actually a regular routine that was going to say, I should probably check if I’m pointed back at Earth. If it wasn’t, it would have looked around at the surrounding stars, and it would have actually pointed the antenna back at Earth. I’m blown away by the fact that somebody thought about that 46 years ago, where that could have been the way that the spacecraft recovered. Obviously, the folks that work in the space industry spend a lot of time thinking about fault tolerance and reliability. This is a mission-critical aspect of what they do, because otherwise, it’s very easy to create a $100 million brick flying through outer space, and that’s an expensive brick.

Scope

This is one of my favorite papers. I actually reread it from time to time. It’s called GN&C Fault Protection Fundamentals by Robert Rasmussen, who works for the Jet Propulsion Laboratory, which is an organization that works closely with NASA on designing spacecrafts. GN&C is guidance, navigation, and control. These are the main software systems here. This paper actually distills a ton of experience spent with really thinking through how to build really fault tolerant systems into some core principles. We’re going to go through them in this talk, and I’m going to explain what the principles are. I’m going to then put them into settings that are more familiar to us in a modern enterprise software system. We’re going to see what this might look like, as we maybe take some of these principles and try and see what would they look like if we applied them to a microservices architecture.

What are States, Behaviors, and Models?

We’re going to talk about just a few definitions. The first one is we need to talk about system state. I like to use a chess game as a way to illustrate this. If we think about a game of chess, there are 64 squares on the board. Each square can hold one of a variety of either white or black pieces. Then if we know that we know what’s in each square, plus we know whose turn it is, that actually fully captures the state of a game of chess. Obviously, this is the initial configuration of a game of chess. We can also capture the state at any point in the middle of the game. Another key thing to understand are behaviors. Behaviors are the things that allow us to go from one state of the system to the next state of the system. Again, in the case of chess, if I look at a knight like this one, it is allowed to move to any of the red squares that I’ve highlighted here. That says, if I’m in this state, this is the next state that I could get to by moving one of the pieces. There’s also a concept of models, so, in particular, models represent which states of the system are possible, not necessarily which ones are desired, but which ones are possible. What I’ve shown here is actually an impossible scenario. That’s for a number of reasons. One is that white has two kings on the board, black has zero kings on the board, and there is a white pawn on the first rank. None of these things are possible in a regular game of chess. We’re going to get to this a little bit later where we’re thinking about what are all of the possible states of the system, and not necessarily just the ones that we want it to be in, but what are all the possible states. Then, finally, the other thing, when we put this all together that models let us do, is if we understand what state we’re in and how different behaviors will lead to other states, we can then put together a plan. For example, if white has two bishops on two different colored squares, and their king, and black just has a king, it is possible for white to force checkmate in this situation. There is a path and a plan that white can undertake to actually get where it’s trying to go, which is winning the game.

These are going to be our fundamental definitions. Some of you may recognize some of this from another setting, which is that we have a system that’s trying to control something and be in charge of making something happen. It needs to have some concept of its objectives, what is it trying to do? We’re going to take observations of the system that it’s trying to control, its current state. The control system has to have a model of what’s going on, and what do I need to do to get that thing into the state I want it to be in. Then that’s how it selects the behaviors that it wants to exert on the system under control. This is a classic control loop model, which may be recognizable to some of you. That’s how we’re taking those terminology, and this is what we’re going to be talking about for most of the talk.

Transparency

In the paper that I mentioned, the key factor here is this concept of transparency. Another way of thinking about transparency is really just making things explicit. There are, in particular, four main things that we’re going to want to make transparent. Those are the objectives that we talked about: models of the system as we’re trying to control, knowledge about its current state, and then actually the control system itself, the logic that we’re using there. The assertion is that we want to pursue transparency across all four of these things, and that’s what lets us build really reliable systems. We’re going to walk through each one of these in turn.

Transparent Objectives

Let’s start with transparent objectives. The paper defines a transparent objective as a contract between the issuer of the objectives. If we want to put things in regular terms these are our clients. These are the callers of the things that we’re doing. The system that’s actually achieving them. The important property is that success or failure is mutually obvious. What that means is, if I issue you a request, and you come back to me and say, I did it. I should agree you did it correctly. We should agree that you actually did what I asked you to do. Let’s walk through a couple of examples where maybe we don’t entirely have that property. Let’s look at DNS. I can issue a dig command on my laptop to go resolve a hostname, and one of the things that will come back in the response is actually a time to live. In this case, it says, this response is good for the next 41 seconds. If I asked for the same hostname, example.com, within the next 41 seconds, then, great, I get a cache response. It’s fast. It’s all good to go. Then the question is, what happens after 41 seconds? At this point, my cache response is stale. It’s past its expiration time. My DNS client will dutifully say, I’m going to go refresh that cache entry. Let me go ask again. What do I do if I don’t get a response? Do I try again? Do I continue waiting? Do I maybe even want to say, I don’t want to wait around but maybe on a situation where using a stale response is actually ok. Maybe these are internal systems and I’m trying to establish a new connection to another internal service, where for some period of time, I might be ok using a stale cache entry. The dig command in particular, does not give me any way to talk about, can I have a stale cache entry if I would like one? In this case, not only does the cache not know what the right thing to do is, but I won’t even have a way of expressing what my desires are.

A better example of this might be HTTP. If we look at cache control headers on a request, there are various directives that you can supply here. Some of you may be familiar with the idea of the new cache directive that says, cache, don’t give me a cache entry, please go all the way to the origin to give me a response. Or max age, which says, you can give me a cache entry as long as it’s no older, it’s no further in the past than this amount. There’s actually a whole bunch of other directives that are part of the HTTP standard that you may not be as familiar with and not use as often. There are things like max-stale which says, I actually am ok with a stale entry, as long as it’s no more than this number of seconds stale. Or minimum-fresh, which says, you can give me a cache entry as long as it’s not going to expire in less than this amount of time. Or only-if-cached, which is like, definitely don’t talk to the origin. I don’t want to wait for that business. Give me a responsive yada cache, otherwise, give me an error. These are all ways that the client can be a lot more explicit about what it is that it wants. It might even be interesting to say, please respond to me within this amount of time. I did not see any proposed standards around this. I think there are various companies that maybe have internal versions of this with custom headers and things like that. That’s another example of more transparency in the objectives.

Really, what we want to think about is these objectives are constraints on the system’s behavior. In the case of an HTTP cache, I want to take the response headers I get from the server, on those responses I saw earlier, plus the request headers that I get from the client plus protocol defaults. For example, the response to a post request is by default not cacheable. Then those things constrain what correct cache behavior might be. We want to start thinking about the fact that there may be multiple sets of objectives that we are then combining to control what we’re trying to do. For each one of these principles, I’m going to talk through some more pragmatic checklists or pro tips. If you’re designing a system, and you are trying to ask, ok, in this scenario, what’s the right thing to do? If your answer is, it depends what the caller wants, then that might be a good indication that you have some hidden or implicit objectives here. Maybe you want to start making those a little more explicit. Whether those are in protocol headers, like HTTP. If you’re using something like gRPC, you might want to consider adding additional fields and request messages and things of that sort. That’s about making it very clear that our objectives fully indicate and express our intent that we want from the system.

Transparent Models

Next thing that we have to talk about are models. Here’s the quote, “Models provide expectations against which evidence of state can be compared.” I had to read this a few times before, I was like, what are they talking about here? I think about this as if the system is in state x, and then I do y to it, then I should see z as a result. This is the idea of like, when I do something to the system, what do I expect to have happen? That’s really what a model is about. One of the important things, and the paper stresses this, is that we may be tempted to think about like, here’s normal behavior, and then there’s abnormal behavior. That we have a tendency to treat these things differently. I suspect lots of people spend a lot of time on the happy path. I’m not going to ask how well tested is your error handling path here. The paper actually says we’re in the wrong ballpark here, that this is not actually the way that we should think about it, because there’s just behavior. This is why, for example, like one of the possibilities for that Voyager 2 probe is that my antenna, it might not be pointed at the Earth. That is a state. I don’t make deep space probes for a living, but I expect that there’s actually a bunch of other stuff that that thing is doing at the same time. It has to understand that it needs to keep doing those things, while it’s trying to figure out what to do about this antenna. When things are separated out, it’s hard to have a coherent response where we’re prioritizing things as well. It’s really important that we think about models as really capturing all of the possible states of the system.

If we want to put things in terms of an example, let’s say I have a service that’s talking to a database. Then let’s say, I start getting errors back on my queries. One way of looking at things is like, what are we going to do here? Those errors probably are showing up in my logs and metrics somewhere, and the model of that database, the model of what’s going on with that thing is probably in an operator’s head at this point. This is a human model in your brain. Maybe you’ve got a feature flag that you can flip. You can say, let’s just go ahead, disable that database. Maybe we have some fallback behavior we can use instead, or at the very least, we can at least fail fast rather than waiting on timeouts or other things that might be going on here. This is one where that model, though, is not really part of the software system at this point. Let’s take another step forward and let’s say, what if the service had some concept, a model of the database itself. One pattern that you may be familiar with is the idea of a circuit breaker. The way that a circuit breaker works is this is going to observe the requests we’re making to the database. If I get too many errors, the circuit breaker is going to trip and it will automatically turn that database off. It’ll disable it automatically for some period of time. This is a pretty simple model. It’s really two states: the database is up, or the database is down. That’s a little bit simplifying because there’s also the like, “Maybe I’ll try it again.” This is a model that the software system itself is using to describe and interact with this dependency. I think we’re a step ahead here from where we were with just a mental model and a human operator.

Then the question becomes, is there something more interesting that we could do? Is there a more interesting model other than just up or down? For example, what if the database is just slow? A database is still up, circuit breaker is not going to help us here. Is there something useful we can do? One of my favorite things is Little’s Law. It’s a relationship that applies to request processing systems. It says that the average number of requests that are in flight being worked on by the system, which is n, is equal to the average transaction rate, the rate at which requests are coming in, that’s x, times the average response time, which is r in this case. It’s a simple equation. No one needs to do any calculus, derivatives, anything like that. What’s really great is it applies to any request processing system. It applies to subsystems of request processing systems, so you can actually nest it. This is a super powerful model. Just to put things in perspective, so let’s say that we say, we’re cruising along, database is responding in an average of 10 milliseconds per request. I’m getting 2000 requests per second through to it. It all sounds good. Now if I see that the average response time has risen to 20 milliseconds, I need to realize that I’m probably only going to be able to get 1000 requests per second to it. That’s a very simple thing that Little’s Law says. This is the type of logic that is very rare for systems to actually do, even though it’s a pretty simple model. What you want to do about it, this is very dependent. It definitely depends, because maybe I only want to send 200 requests per second. Maybe I’m ok with 20 milliseconds response time average. Maybe I do nothing, literally nothing, because it’s ok. I may also want to say, this is actually not ok. Maybe I need to start shedding load, or I need to start prioritizing certain queries over other ones, and things like that. It’s only when I have some model of the idea of the way these things are related that I can start making intelligent decisions about these things.

We’ve actually looked at a couple different points on this. The model that we have [inaudible 00:19:14] can be anywhere on a spectrum from oversimplified. Meaning, might as well not have done it. It doesn’t let us do anything interesting. To full fidelity, like we can model that the database has a query cache, and it’s got a number of threads, and how much memory is on the database server. We could do all that. We’re almost reimplementing a database at some point, when we’re doing that. That’s probably more effort than it’s worth. What we really want are points somewhere in the middle where the model is interesting enough to be useful. As we saw with the circuit breaker, like even just up and down, that’s a simple model, but it’s still useful. Maybe with Little’s Law, we get a slightly more powerful model that lets us do a few more things, but it’s still easy enough for us to implement, and so on. We want to be able to make sure that the model is simple enough that we can actually use it and understand it relatively easily. Simon Wardley has a great quote, which he says, “All models are wrong, but some are useful.” That’s really what we’re looking for here.

What’s our checklists for models? When we’re looking at a service, do I have a model of my own capabilities? Number one. When we say model means like, I can actually look in the code and say here’s the part of the code that represents my capabilities. Do I have a model for each of my dependencies? Then, I think most interesting, can I adjust my own concept of my own capabilities in response to changes in what I understand about my dependencies? That’s where we have now gotten a very powerful model in terms of being able to manipulate this thing. The third principle is around transparent knowledge. This is the idea that what we want is we want knowledge to be explicit. Representing it clearly with timeliness and uncertainty, and striving for a single source of truth. Let’s talk for a little bit about uncertainty. I actually ran this command, this sntp, which uses the network time protocol to try to understand what the difference is between my system clock and some other time server’s clock. In this case, I ran this while I was in Philadelphia, so that’s the red X on the right, and the time server is somewhere in Colorado, that’s the red X on the left. This is what it gave me back. What this basically said is, we think the time server’s clock is ahead of your clock by 47 milliseconds, plus or minus 63 milliseconds. In other words, I don’t even know which one is actually ahead.

I actually had an interesting thing where I was trying to debug something in production very recently, where we’re like, why are things happening in this order? It doesn’t seem like it’s right. That’s because this thing was happening in this data center over here, and this one was happening in this other geographically different data center over here. Sixty-three milliseconds is like pretty big when we’re looking at databases that might give me responses in single-digit milliseconds. What was actually happening here, and Michelle also talked about this, like clocks are a thing. What I think is really interesting is that this sntp command actually gives me the plus or minus, on what the answer is. Folks that are making deep space probes, a lot of what they do is they’re collecting data. They have instruments that are measuring physical things. When you’re in that setting, like we’re used to our measurement instruments having tolerances. We get plus or minus out of these things, when we think about it. If you remember high school science class or something like that, you learn about tolerance and accuracy and things like this. A lot of the things that we do in computer science and software, we don’t think about that. We’re like, no, this is the thing. Absolutely. Period. This might be something interesting for us to think about here.

Then there’s a notion of timeliness. If I go make an HTTP request to something that’s cached, one of the headers that I may get back is the age header. In this case, it says, it’s actually been 95,000 seconds since I got this from the origin. Maybe that’s super interesting for me to know. A really common pattern is that, I’ve got some piece of my process that’s pulling something. It’s like on a regular basis, what’s your current state? What’s your current state? What’s your current state? Then when I want to make use of it, I go grab my local cache copy. Like, what’s the last thing that you saw? An interesting question is, would you do anything different if that local copy that you got, and maybe you’re polling once a minute, if you figured out that like, this thing that I got is from three days ago, is the last time I successfully got the current state. If we’re not annotating it, how do we know? Would we do anything different? We often don’t annotate sources of data with when were they generated. That may or may not have importance to your domain or not, but I think it’s something for us to consider.

Let’s talk about a single source of truth. In the earlier example, I showed one service instance talking to a database. The reality is I probably have multiple instances of the service, possibly talking, and it’s probably even multiple database servers running in a cluster. Even if I do have explicit models, each service instance may develop its own model of what’s going on with the database. The only place that I actually get a coherent view of what’s going on in that database is probably in my observability stack, in some dashboard where I’m collecting all of the errors, and logs, and metrics, and things like that. Again, that’s really for human consumption, in many cases. Not all cases. We definitely have automated alarms, which start to look at things like this. Those tend to fire alarms and wake up a human. Where do we have the opportunities to start to build a little more smartness into this?

When I think about the service that I’m building, if I have a model of a dependency, do I have one place where I can find out what its current state is, or at least what I think its current state is? Has that detail been annotated with freshness and accuracy, or uncertainty? Do I have some way of keeping it updated? If we’re thinking about like, what’s the latency of queries to the database, and I’m sending a lot of queries to the database, fine, I can probably just observe what’s going on there, and get a pretty good understanding of what’s going on with the database. However, if it’s a database that I only access intermittently, I may need to build something more proactive that goes with it. Maybe something that just sends a lightweight query to make sure like, I can actually still talk to that thing. That can be something useful for us.

Transparent Control

Then the fourth principle is around transparent control. This is where we tie everything together. If I have knowledge of how the system behaves, what its current objectives are, and what its current state is, then no other information is required to choose a control action. That’s actually the thing that we’re shooting for. This is actually a really useful property. What it says is, I can think of my control system as a function that takes my current objectives and the current state of the system, and then decides what to do. When we think about the control decisions in this setting, there’s a couple things that are really important here. One, this is stateless. You can tell because we’re literally passing the state in, so the function itself does not have any current understanding of state. We’re going to see that that could be maybe useful later when we try to build one of these. It’s also testable. Again, if we think about, states represent all of the possible states of the system. If that’s the data type where we say state, that data type should be able to express every possible state of the system. If we’re doing that, and we’re explicitly passing it in as an argument, it seems like it might encourage us to have a little more shot at trying to understand if our test suite is comprehensive. More importantly, these are also deterministic. This really adds to our ability to test the control system, understand how many of the scenarios are recovering. Then to actually have confidence that it will behave that way when we get there.

Putting this into another setting that may be common to you. Here’s a standard household thermostat, a non-smart one. It has all these things. It has objectives. It says, please make the temperature be 62 degrees, in this case. There are some other additional constraints as well. For example, it’s like, this system is in heat mode. Which means you cannot run the air conditioner right now. That’s a constraint on what the thermostat is supposed to be able to do. It definitely has state. It knows what temperature it currently is in the house. There’s a model which at the very least it says like, if it’s too cold, run the furnace. Now actually thermostats actually are a lot smarter than that, because they understand things like, how often should I run the furnace so that I can get the most efficiency on my heating, and things like that. Then also it has actions. In this case, the thermostat is actually calling for heat and running the furnace. This is how we put all this stuff together, in maybe a setting that’s more familiar to you.

Now you may say, “Jon, but what about microservices? We are not running a bunch of micro thermostats. How does this really work?” I’m going to propose a way of thinking about this that maybe pulls this all together. Here’s our setting. We’ve got a bunch of services that have a dependency on a database. Maybe there are connection pools. Each of the service instances has a pool of database connections that are in there. It probably has a maximum size to it. They might be running in an autoscaling situation, whether we’re scaling at the VM level, or we’re doing something more at a container orchestration level. This is a pretty common setup. Again, the way that this usually works is like, we’re pulling metrics from stuff, we’re sticking them in a dashboard. We got a bunch of operators that are responsible for them, like changing the way these things are configured. The operators are saying, what’s going on? What do I actually want to be going on, and so what should I do about it? The operators here are functioning as the control plane of the service. They are deciding how this service should be operating. I think a pretty straightforward next question is, what if we had a microservice control plane that was a piece of software? How would this work? This is where we pull all those principles together. I can still collect. It needs to be aware of a set of objectives. We’ll get about what those might look like. It can still collect metrics. All these things have metrics endpoints, for generating logs, notifications, events. It can subscribe for those same things. It can build a model of the world. It can understand, what does that database look like? How many service instances do I have? Really, what’s going on with this service? It can have a model. We talked about Little’s Law as one model that we could use here for manipulating things. Then, it can actually configure the same levers that we’ve already built in.

An interesting thing here, remember we said if we got that transparent control loop, it’s stateless, which is really nice because it means that I can just schedule this as a single instance and I can ask my infrastructure control plane and say like, please have one of these running. Maybe it’s a single replica task in a container. It will begin observing metrics. It can build up its state. Then it can begin configuring the system from where it is. We don’t actually have to do anything special to make this recover other than making sure one of these is running. That’s a nice property. Also, again, because if we’ve done a good job with defining our objectives, the objectives are things that those human operators or other systems can also use. That’s actually an important property.

Actually, that paper that I talked about, even though there’s tons of cool automated recovery stuff that’s going on, they’re very clear that it’s the ingenuity of human operators that save many missions. The point is, give those operators some place to stand. A big part of that is making sure that when you have control systems like this, that they actually make sense to the humans that ultimately have to interact with them. I think by thinking through things in this way, we get that property that comes out of it.

Let’s talk a little bit about what these objectives might look like. We’re used to talking about service level objectives, and we might have service level agreements, things of this sort. These are slightly different things, usually. They may express things like, the throughput that can be supported, number of concurrent requests that can be in flight, certain latency profiles, maybe a p99, p999 latencies, average latencies, error rates, things of this sort. These are things that we commonly use to describe these things. SLOs tend to be self-imposed. These are imposed by the operators of the service. These are our goals. This is what we think the service should be able to do. This is what it’s designed to be able to do. That’s what we’re striving to actually operate towards. Service level agreements are either offered to you or dictated by clients, depending on who has better negotiating power there. The idea is that, your SLOs have to be tougher or tighter than your SLAs or you’re going to end up breaking your promises. The way that I think about it is SLOs are really about my capabilities, what am I capable of doing? Actually, this is where service level indicators, current state, what capabilities do I currently have compared to what I’m designed to have on my best day? Service level agreements in the setting that we’re looking here, this is really what I think the best use for the objectives that we’re talking about would be. This is a client saying like, “I would like this.” You as a service would say like, “I got you. I can get that for you.”

Let’s put this together. The way that we described things previously, the service was just observing what was going on with the database just by interacting with it and seeing what was going on to it. In reality, when we have a microservices architecture, like we own and construct many pieces of these things. Let’s say I have service A, and it’s calling service B. I control these things. I can put a control plane for both of them, and now they can cooperate. Control plane A, again like we said with those SLAs, you can say like, here’s actually what I need out of you, in terms of throughput, or error rate, or things of that sort. Another way of thinking about is you can say, “I’d like to make this reservation.” Maybe those things have a time to live as well. Like for the next 10 minutes, here’s what I would like from you. Then control plane B needs to have awareness of its own capabilities. Remember, that was one of the checklists. Do I have a model of my own capabilities? They can respond back and say, yes, I can do that for you, or, no, I can’t. If it realizes that it’s degraded in some fashion, it can proactively advertise that fact. Maybe puts that on a notification system of some sort, and can say like, “I normally can do requests X, Y, and Z. Z is currently broken, but I can still do X and Y.” That’s actually super useful for someone that’s calling me because rather than waiting for me to give them an error, they can take their adaptive action right away. They can now adjust their own expectations about what to do if they do that. Then obviously we can have other services as well. There could be a service C that also calls B. It’s going to be asking for its own things. Because I’ve got a single control plane for B, it’s in a position to be able to reconcile all of these objectives together and figure out if it can meet them, and if it can’t, how to properly prioritize between them. A lot of times those priorities are not necessarily made explicit anywhere. When we run into problems, it’s like, what will the system do? It’s like, let’s find out, or we end up finding out when those things actually happen.

As a good example of this, like we talked about this setting, like an autoscaling group, that’s something that’s adaptive. It’s going to add and remove service instances, according to the metrics and what we’re probing them to do. You can also have adaptive connection pools. I’ve also seen implementations where the size of the connection pool may grow and shrink, depending on how many requests you’re making and how the database is responding. Here, the question is, ok, now my database has higher latency, what should we do? Should we add instances? That may be something the autoscaling group might try to do. Should we adjust connection pool sizes? That might be something the adaptive connection pools are trying to do. Should we address thread pool sizes in the service instances themselves? I don’t even know if there’s something that’s trying to adapt that. Maybe we should do all of those things, or maybe we should actually do none of them. It all depends on what the objectives are. The reality is, we often build a bunch of these adaptive mechanisms but there’s nothing that pulls them together. What will actually happen? A lot of times, we don’t know. When we have incidents, it’s usually not the simple incidents. The simple ones, we’ve got a lot of those covered. If I lose an instance of a stateless service, because it just dies, we know how to start a new one. We know how to do that. All of our incidents are interesting. It’s because like, these four things happen to happen at the same time and now they interact in a way I totally didn’t expect. Now I’ve got something going on. We have a tendency to build lots of mechanisms that operate independently, and we don’t have a single place where we can pull them together to get a coherent response. That’s the type of thing that this control plane could offer us by doing that.

Conclusion

A little thought exercise for you. That is that if we think about building transparency in these four things, objectives, models of our own service and the things that we depend on, knowledge of their current states, and having actually just an explicit place where we’re making control decisions about these things. Then I’m going to argue that we can build with actually, I think, not that much effort, control planes that are robust, coherent, composable. We saw how we put them together for multiple services, but also understandable. These are also things that human operators can make use of. If we want to do MLOps, we’ve built all of the framework to provide the data, and the control levers, and a place for those MLOps to run, in a way that they can also be composed. If we wanted to start to do machine learning for operations, we could do that too, if those are the types of models that we want to build. I think we don’t have to go all the way to complicated ML models, in order to get something useful out of this. With a little bit of effort, we can get a lot more visibility and control and understanding of what our systems are going to do when the time comes. I really think this understandable bit is really important. My uncle is a retired professor of anthropology. One time he said to me, the main thing holding back human society is that we each only have 1500 cubic centimeters of brain. We are building complex systems that do not fit in any one person’s head. We are hardware limited as a species. When we think about designing things, even adaptive things in software, making sure that they’re still understandable and that a human can still interact with them and get them to do the things that they want is, I think, a really important property.

Dealing with Explosion of State Variables, as They Scale Up

Moore: We have potentially an explosion of state variables, and how do we basically deal with that, as those things scale up?

There is a property of control theory. I’m not a control theorist, so I may be paraphrasing this improperly, which is that your control system has to exhibit at least as much complexity as the system it’s trying to control. To some degree, the more complex the systems we’re building, I think there is no escape for that, unless we’re willing to sacrifice the fidelity of our models. As we talked about, there’s that spectrum of how detailed the models are. One way is we can say, maybe this is a place where we need to simplify so that we can constrain and understand the implementation at the expense of maybe this super optimal thing that we might have done. Maybe we can get to things that are good enough. I think the other way, the way that we often think about things in computer science is with encapsulation. That’s where the idea of, if we think about a subsystem that has these types of properties, and its own transparent control plane, to some degree that hides a bunch of operational detail from the things that are calling it. The idea is to build, to some degree, like a tree of these control plane systems. Languages like Erlang and actor model systems have this concept of a supervisory tree, and these sorts of relationships. That’s, I think, a fundamental reason why, was it Ericsson that built all these telecom switches using Erlang? I’m not saying like, go rewrite all your stuff in Erlang, at all. I think there’s a reason why this particular idea of these nested and tree structured really, control systems have a lot of power. We’ve seen where that’s been helpful in the past.

The Overcorrection/Oscillation Problem

Moore: What about overcorrection, or oscillation, is another problem here.

Control theory to the rescue here. For example, there’s a very classic case of control systems called PID controllers. They can do all kinds of crazy stuff. They’re really good at balancing stuff, for example, with motors. They’re controlling motors. Think about like a tray with a ball rolling around on it. They’re pretty simple logic. You can knock on the tray, and it can totally recover. PID controllers have three different aspects to them. One is like, how big of a problem do I have? How far away from my target am I currently? If I’m pretty far away, I probably want to do something like a little more severe here to get closer to where I’m trying to go, faster. Another one is like, how is that gap closing? If I’m approaching my target quickly, I maybe want to slow down on things so that I don’t overshoot, to your point of overcorrecting. Then there’s another one, it’s the idea of like, how do I prevent things from just oscillating in a stable pattern above things? Because ideally, I’d like to get to a point where that eventually damps over time, and I get to a stable state. Control theory does have, I think, things that can be helpful for us. Maybe even basic PID controllers for which there are open source implementations of those things. That may be a useful thing for us to look at. This is where timeliness of state comes into play, which is, when I take a control action, how long will it take for the results to show up? Am I waiting that long before I’m deciding to do something different? Some of that stuff has to be built in when we’re making adjustments.

Balancing Robustness and Quick Iteration, in the Control Plane

Moore: If we’re looking at the core service implementation, and this is something that we’re changing rapidly, how do I balance that with the need to then also adjust its control plane as a result?

As a very simple example, let’s say I add a new dependency to my service. That necessitates adding a model of that dependency to the control plane. If you want to do something like this, you are signing up to maintain the control plane, while you’re modifying the data plane. I think where these transparent principles here come into play, is that leads to easier to understand and maintain control planes. I think the idea is that if we’re not being explicit about the control plane, then we’re being implicit about them. I think some of the question is, would I rather be explicit and do the work to actually think about what do I want to have happen in certain scenarios, which like, that’s work. Or do I want to just say like, I’m not going to worry about it. I’m just going to have the ops team figure it out when an incident happens. Don’t get me wrong, that may be the right thing to do. This is all highly context dependent on, how bad is an outage? How much effort is it compared to how likely something is to happen here? That is something that we have to weigh when it comes to, do we even want to pay the expense of running an extra container instance to be this control plane, for example? That may be material: maybe it is, maybe it isn’t. That’s going to be highly dependent on your business, I think.

Standard Way of Modeling Microservices

Participant: Do you have a standard vocabulary or factor, like tooling in the language for modeling microservices, or it’s just ad hoc as you go along?

Moore: I’m not aware of a standard way of modeling this. Part of my idea here with giving this talk is maybe to inspire us to start thinking about this as an industry. The paper introduces some terminology. I think Little’s Law, for example, is a very useful way of thinking about things. We see that we have common ways and terminology of talking about pieces of these systems. We have SLOs, SLAs, those are for objectives. We do pieces of this in different places. We had lots of examples where it’s like, this software system doesn’t have the transparent objectives, but this one did. We do it sometimes. What I hope that you take away from this is just some additional awareness, and you have the opportunity to look for these things. I think this is not an all or nothing gig, either. I do think that you can have value, all you do is just make some of your objectives a little more explicit, so that your answer to, what should I do in this scenario? Is not just, it depends on what the client wants. Have the client tell you what they want. Even incremental investments here can bring value. That’s the benefit of principles like this, is that they’re just guidelines. It’s not prescriptive in that sense. It’s just a way of thinking about the system.

See more presentations with transcripts

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


Eric Bischoff Offers High Praise For AEW’s Recent Hiring Of Former WWE Executive

MMS Founder
MMS RSS

Posted on mongodb google news. Visit mongodb google news

Eric Bischoff thinks AEW hiring former WWE creative team member Jennifer Pepperman is one of the most “exciting things” he’s heard out of AEW in the last three years.

During the latest installment of his “Strictly Business” podcast, Bischoff spoke about this, as well as how he recalled her once standing up to Vince McMahon behind-the-scenes in WWE.

Featured below are some of the highlights from the episode where he touches on this topic with his thoughts.

On his brief period working with Jen Pepperman in WWE and how she once even stood up to Vince McMahon: “Well I worked, I shouldn’t say I worked — I didn’t work closely with Jennifer when I was in WWE back in 2019. She was not a part of my team, although that didn’t really mean much because nobody really knew who was on which writing staff, there was so much discussion and transition. But I got to know Jennifer and really, really liked her. I respect her work, she’s got a tremendous background. She understands storytelling, she’s tough. She’s a very sweet person, easy to get along with, she’s got a great personality and she’s very outgoing. But, she’s also tough. She’s not gonna be intimidated. I’ve watched her interact with Vince, and Vince can be very, very intimidating. I watched her stand up to Vince, I watched her react to pressure that a lot of creative people that I’ve worked with in the past would’ve probably taken pretty hard. She digs in and does the work.”

On how the hire for AEW is one of “the most exciting things he’s heard out of AEW in the last three years”: “This is the most exciting thing I’ve heard out of AEW in the last three years, maybe longer. It indicates a couple things to me. One is, Tony recognizes he has a problem. You can’t fix a problem or come up with a solution if you don’t recognize what’s wrong with it first and the fact that Tony is bringing in [people] at a high level, suggests to me — and part of this is wishful thinking on my part but I do hope I’m right — that Tony is recognizing that his creative, his fantasy wrestling matches and dream match nonsense and creating wrestling that appeals to the internet, it’s not working. I’ve been banging on that drum for over two years now, I’ve gotten a lot of hate from it. The fact that Tony recognizes that he has a problem, recognizes that he needs to bring somebody in, as I’ve been saying for years now, you need somebody that understands a disciplined storytelling structure. Not only a beginning, middle, and end, but understanding the plot points along that arc that need to happen, it’s almost like a checklist. They need to happen over the course of an arc in order to have any chance of building or retaining an audience, and that’s what Tony has had a hard time doing, building and retaining an audience. He’s gone from a premiere of 1.4M viewers down to averaging around 800 thousand, that’s a problem, especially when the overall audience for wrestling is growing because of WWE and their success. So I think the fact that Tony recognizes, hopefully, and brought somebody in who absolutely has the tools and the experience, and I believe the personality — Jen brings all of that to the table.”

Check out the complete episode of the Strictly Business podcast with Eric Bischoff at Spotify.com. H/T to Fightful.com for transcribing the above quotes.

Article originally posted on mongodb google news. Visit mongodb google news

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


Google Introduces Firestore Multiple Databases

MMS Founder
MMS Renato Losio

Article originally posted on InfoQ. Visit InfoQ

Google Cloud recently announced the general availability of Firestore Multiple Databases. The new feature is designed to isolate customer data and facilitate the management of microservices, as well as development, test, and staging environments.

Announced in preview in the summer of 2023, the new feature supports multiple regions and both Firestore database modes, Native Mode and Datastore Mode, in the same project. Furthermore, Firestore’s cloud monitoring metrics and stats are now aggregated at the database level.

While it is now possible to manage multiple Firestore databases within a single project, each document database operates with independent isolation, ensuring both data separation and performance: the cloud provider claims that traffic loads on one database will not adversely impact the performance of others within the project.

By leveraging the conditional Identity Access Management control, It is possible to specify different security policies on databases within a project. Sichen Liu, senior software engineer at Google, and Minh Nguyen, senior product manager lead at Google, explain:

Firestore lets you apply granular security configurations on an individual database through IAM conditions. This functionality allows distinct security policies to be applied to different databases, enabling precise, granular control. For instance, you can grant specific user groups access solely to designated databases, ensuring robust security and data isolation.

The new feature simplifies cost tracking too: Firestore now offers granular billing and usage breakdowns on a per-database basis. Developers can monitor costs using BigQuery, segmented by individual database IDs.

Supporting multiple databases has been a long-term request from the community. The challenge of creating different databases for production, staging, and development was highlighted several years ago, leading some developers to use the predecessor Firebase Realtime Database instead. Francisco Durdin Garcia, full-stack developer at PrivateGPT, asked in 2018:

It’s possible to create multiple instances of Firestore Database(one for each project) inside the same console in Firebase? I saw that it’s possible to do it for Firebase Realtime Database, but I don’t see the possibility to do it for Firestore.

Azidin Shairi, cloud architect at Happeo, tested the new feature during the preview and wrote:

This eliminates the need to create multiple projects just for Firestore databases and if you have a small environment, this also reduces the complexity with cross-project access control.

Liu and Nguyen add:

Carefully choose database resource names and locations during creation, as these attributes cannot be altered post-creation. However, you can delete the existing database and subsequently create a new one with the same desired resource name, but in a different location.

With the GA, multiple databases are now supported in the console, Terraform resources, and all SDKs. If your application does not require multiple databases, Google suggests continuing to use the (default) database, as both the Cloud Firestore client libraries and the Google Cloud CLI connect to it by default.

About the Author

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


Major Browser Vendors Announce Interop 2024 to Solve Incompatibility Issues

MMS Founder
MMS Bruno Couriol

Article originally posted on InfoQ. Visit InfoQ

Browser makers Apple, Google, Microsoft, and Mozilla, alongside consultancies Bocoup and Igalia, recently announced Interop 2024, a project to promote web browser interoperability. Interop 2024 includes 17 focus areas addressing layout, styling, user interaction concerns, and more.

Google’s Rachel Andrew explained Interop’s goal as follows:

Interop, at its core, is a comprehensive series of tests and benchmarks designed to evaluate the compliance of individual browsers based on our joint commitment to web standards. Ultimately, Interop strives to eliminate inconsistencies between browsers and foster a unified vision within the industry.

On Microsoft’s side, – Patrick Brosset and Dan Clark commented:

[Interop 2024] is a continuation of a multi-year cross-organization project [that] acknowledges web developer pain points and aims at making the web platform more pleasant to work with. We’re doing this by implementing frequently requested features and fixing the top cross-browser compatibility issues.

Interested readers may explore the 17 selected focus areas by visiting the Interop 2024 Dashboard. The dashboard details the features and work needed, along with the current scores for each browser. Readers may also review the Interop 2023 dashboard to see the focus areas of last year and get a sense of the progress made. Interop 2024 continues to focus on how web pages are laid out, structured with CSS, and built with HTML elements.

CSS Nesting is one focus area of Interop 2024. CSS nesting supports the creation of stylesheets that are easier to read, more modular, more maintainable, and smaller. While all browsers support CSS Nesting, there are some differences in implementations due to changes to the specification. Interop 2024 seeks to ensure that all browsers abide by the same specification.



parent {
  
  child {
    
  }
}
  

parent {
  
  & child {
    
  }
}


parent {
  
}

parent child {
  
}

(source: MDN web docs)

The Popover API is also an important focus area of Interop 2024. The Popover API provides developers with a standard and flexible mechanism for displaying popover content on top of other page content. Typical use cases for the popover API include user-interactive elements like action menus, custom “toast” notifications, form element suggestions, content pickers, or teaching UI.

<button popovertarget="my-popover">Open Popover</button>

<div popover id="my-popover">Greetings, one and all!</div>

(Source: MDN web docs)

One Reddit user provided an example of how Interop efforts were pushing the web forward:

The popover is an interop 2024 focus. Nice! I really want to start using this in places but without Firefox support it’s still in the cool things I can’t use in prod pile.

Other Reddit users regretted the lack of transparency in the process that selects the focus areas. In particular, some developers singled out that JPEG XL was not accepted in the list. One user commented:

Disappointing, but not unexpected. Let us now use this year to deploy JXL images to our sites, promote the format, and help improve the implementation. If it is used enough or enough of a popular request, eventually it will be in their interests to provide it. The “has” selector took over a decade, but we have it now.

Readers are welcome to read the respective blog posts of Mozilla, Google, Microsoft, Apple, Bocoup, and Igalia.

About the Author

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


MongoDB (MDB) Rises Higher Than Market: Key Facts – Yahoo Finance

MMS Founder
MMS RSS

Posted on mongodb google news. Visit mongodb google news

The most recent trading session ended with MongoDB (MDB) standing at $451.52, reflecting a +0.34% shift from the previouse trading day’s closing. The stock exceeded the S&P 500, which registered a gain of 0.04% for the day. At the same time, the Dow added 0.16%, and the tech-heavy Nasdaq lost 0.28%.

The the stock of database platform has risen by 12.41% in the past month, leading the Computer and Technology sector’s gain of 4.78% and the S&P 500’s gain of 5.01%.

Investors will be eagerly watching for the performance of MongoDB in its upcoming earnings disclosure. The company’s earnings report is set to be unveiled on March 7, 2024. The company is predicted to post an EPS of $0.46, indicating a 19.3% decline compared to the equivalent quarter last year. Alongside, our most recent consensus estimate is anticipating revenue of $431.99 million, indicating a 19.56% upward movement from the same quarter last year.

Any recent changes to analyst estimates for MongoDB should also be noted by investors. Recent revisions tend to reflect the latest near-term business trends. Hence, positive alterations in estimates signify analyst optimism regarding the company’s business and profitability.

Our research suggests that these changes in estimates have a direct relationship with upcoming stock price performance. To benefit from this, we have developed the Zacks Rank, a proprietary model which takes these estimate changes into account and provides an actionable rating system.

The Zacks Rank system, ranging from #1 (Strong Buy) to #5 (Strong Sell), possesses a remarkable history of outdoing, externally audited, with #1 stocks returning an average annual gain of +25% since 1988. Over the last 30 days, the Zacks Consensus EPS estimate has witnessed a 1.52% decrease. Currently, MongoDB is carrying a Zacks Rank of #4 (Sell).

With respect to valuation, MongoDB is currently being traded at a Forward P/E ratio of 142.85. Its industry sports an average Forward P/E of 30.96, so one might conclude that MongoDB is trading at a premium comparatively.

The Internet – Software industry is part of the Computer and Technology sector. With its current Zacks Industry Rank of 79, this industry ranks in the top 32% of all industries, numbering over 250.

The Zacks Industry Rank assesses the strength of our separate industry groups by calculating the average Zacks Rank of the individual stocks contained within the groups. Our research shows that the top 50% rated industries outperform the bottom half by a factor of 2 to 1.

Don’t forget to use Zacks.com to keep track of all these stock-moving metrics, and others, in the upcoming trading sessions.

Want the latest recommendations from Zacks Investment Research? Today, you can download 7 Best Stocks for the Next 30 Days. Click to get this free report

MongoDB, Inc. (MDB) : Free Stock Analysis Report

To read this article on Zacks.com click here.

Zacks Investment Research

Article originally posted on mongodb google news. Visit mongodb google news

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.