Oracle Ships GraalVM Java JIT Compiler – But Only in Its Own JDK

MMS Founder
MMS Karsten Silz

Article originally posted on InfoQ. Visit InfoQ

Oracle added the GraalVM Just-in-time (JIT) compiler as an experimental feature to Oracle JDK 23, its OpenJDK distribution, in September 2024. The GraalVM JIT compiler is faster than the standard OpenJDK JIT compiler and easier to maintain. Oracle’s move is controversial because it has investigated including the GraalVM JIT compiler in all OpenJDK distributions, not just its own. The state of that investigation is unclear.

Java needs a JIT compiler because the HotSpot JVM interprets Java’s machine-independent bytecode at runtime. That is much slower than languages like C++, where the Ahead-of-time (AOT) compiler creates machine code at build time. In Java, the JIT compiler converts the bytecode of often-used methods (“hot spots”) into machine code at runtime.

The GraalVM JIT compiler is one result of the Oracle labs project GraalVM, a high-performance runtime for JVM languages like Java, JavaScript, Python, and Ruby. The GraalVM JIT compiler can run inside the standard OpenJDK virtual machine called HotSpot JVM. But it also runs in GraalVM JDK, a Java distribution based on Oracle JDK.

The standard OpenJDK HotSpot JIT compiler is a tiered compiler consisting of the C1 and C2 compilers. Both are written in C++ and have been the default since 2000. The GraalVM JIT compiler has some technical advantages over HotSpot and is written in Java which makes it easier to maintain than the C1 and C2 C++ code. Oracle found that running its cloud business software NetSuite with the GraalVM JIT compiler reduced CPU consumption by 6-7% in general and 13% in some workloads.

GraalVM has a second Java compiler, the Native Image AOT compiler that moves compilation and as much initialization work as possible to build time. It produces native executables that start instantly and have no JIT compiler. Using Profiling-Guided Optimization (PGO), Oracle says that Native Image reaches a peak performance close to the JIT compiler and even exceeds it in some cases.

Using GraalVM Native Image comes at the price of some possibly showstopping constraints that do not affect most Java applications and a more expensive troubleshooting process. Many application frameworks, such as Helidon, Micronaut, Quarkus, and Spring Boot, have supported GraalVM Native Image for years. Some libraries, especially older ones, do not work out of the box but typically do when supplemented with configuration data for Native Image.

Oracle proposed Project Galahad, an OpenJDK project, in December 2022. Its goal is to contribute the GraalVM JIT compiler and GraalVM Native Image “to the OpenJDK Community and prepare them for possible incubation in a JDK main-line release.” The project was approved in early 2023 and has had little public activity since then.

In June this year, Douglas Simon from Oracle said, “The goal of the Galahad project is to better align the GraalVM project with OpenJDK and Oracle JDK” and “Galahad is mostly about aligning the development process between the two teams and shouldn’t have any significant effect on user-visible features in the GraalVM distro.” As of November 2024, it is unclear if Project Galahad will lead to the inclusion of the GraalVM JIT and AOT compilers in future OpenJDK mainline releases – and when that could happen. It is also unknown how the GraalVM JIT compiler in OpenJDK mainline would differ from the one in the Oracle OpenJDK distribution then.

InfoQ reached out to Oracle for comments, but Oracle chose not to participate.

Simon Ritter, Deputy CTO at Azul Systems, was kind enough to answer questions about JIT compilers.

InfoQ: Most OpenJDK distributions ship with the HotSpot C1 and C2 JIT compilers. In your experience, which Java applications under which circumstances benefit from a different JIT compiler?

Simon Ritter: This is difficult to answer definitively. The role of the JIT compiler is to take Java bytecode and convert them to native machine instructions at runtime. The benefit of this is considerably improved application performance compared to simply interpreting the bytecode.

The C1 and C2 JIT compilers were introduced as part of the HotSpot virtual machine back in JDK 1.2 to address Java’s reputation as slow. Code is quickly compiled using C1 to give an immediate performance improvement. Later, the code is recompiled using C2 to generate optimized native instructions based on collected profiling data.

Replacing C2 can lead to more highly optimized native instructions, which will deliver better application performance. The level of improvement will depend strongly on what the code actually does. Simple applications will be unlikely to see any improvement in performance, whereas complex applications, perhaps which are numerically intensive, could see big performance gains. Ultimately, the best approach is to test with alternatives and determine which is best for your application.

InfoQ: Azul sells the Prime OpenJDK distribution with the Falcon JIT compiler. How does Falcon work?

Ritter: Falcon is a replacement for the C2 JIT compiler and is based on the open-source LLVM compiler project. LLVM is a collection of modular and reusable compiler and tool chain technologies. Much of its work is about taking intermediate representation of compiled code together with profiling data to generate optimal native machine instructions. Azul used this and integrated it into the JVM to work in conjunction with other aspects, such as the garbage collector, class loader, and so on. This work was then contributed back to the LLVM project.

The use of LLVM for JIT compilation allows for different performance characteristics, using techniques like more aggressive speculative optimizations and better auto-vectorization, to name two. This can often deliver double-digit performance improvements

InfoQ: How does the Falcon JIT compiler compare to the C2 and the GraalVM JIT compilers?

Ritter: C2 was introduced in 1998 and is monolithic in its design; it is hard to modify to deliver performance improvements. Falcon, being based on LLVM, is modular, so adding new compilation features is much easier.

The Graal JIT compiler is written in Java. Again, this provides easier ways to modify how it generates code and improve optimizations. The Graal JIT compiler is not currently included in OpenJDK and is only available with the Oracle JDK as an experimental feature

InfoQ: How do Java JIT compilers fare against JIT compilers in other languages, such as .NET or JavaScript?

Ritter: Again, this is a hard question to provide a definitive answer. Probably the best response is to look at the popularity of JVM-based applications on the server-side compared to .NET and JavaScript. The JVM is incredibly scalable and robust, which is why almost all enterprise mission-critical applications choose this platform.

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.


Couchbase, Inc. Reports Earnings Results for the Third Quarter and Nine Months Ended …

MMS Founder
MMS RSS

Posted on nosqlgooglealerts. Visit nosqlgooglealerts

December 03, 2024 at 04:05 pm EST

Couchbase, Inc. reported earnings results for the third quarter and nine months ended October 31, 2024. For the third quarter, the company reported revenue was USD 51.63 million compared to USD 45.81 million a year ago. Net loss was USD 18.15 million compared to USD 16.26 million a year ago. Basic loss per share from continuing operations was USD 0.35 compared to USD 0.34 a year ago. Diluted loss per share from continuing operations was USD 0.35 compared to USD 0.34 a year ago.
For the nine months, revenue was USD 154.54 million compared to USD 129.95 million a year ago. Net loss was USD 59.04 million compared to USD 58.78 million a year ago. Basic loss per share from continuing operations was USD 1.16 compared to USD 1.26 a year ago. Diluted loss per share from continuing operations was USD 1.16 compared to USD 1.26 a year ago.

© S&P Capital IQ – 2024

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.


AWS introduces Amazon Aurora DSQL and DynamoDB enhancements for multi-region workloads

MMS Founder
MMS RSS

Posted on nosqlgooglealerts. Visit nosqlgooglealerts

Amazon Web Services Inc. today announced several new capabilities for Amazon Aurora and Amazon DynamoDB, designed to support the most demanding workloads that need to be operated across multiple regions.

The new capabilities, debuted at the AWS re:Invent conference in Las Vegas, are focused on supporting multi-region workloads by delivering strong consistency, low latency and the highest availability, whether customers use SQL or NoSQL.

Up first is the launch of Amazon Aurora DSQL, a new serverless, distributed SQL database that allows customers to build applications with the highest availability, strong consistency and PostgreSQL compatibility,

Amazon Aurora DSQL offers a cloud-native, serverless, distributed SQL database that delivers the performance and capabilities of a high-end commercial database with the cost-effectiveness of open-source solutions. The service has been designed from the get-go to meet the demands of globally distributed, real-time applications, including offering 99.999% multi-region availability, strong consistency and virtually unlimited scalability. Aurora DSQL eliminates the tradeoffs faced by developers to provide low latency, SQL compatibility and zero operational burden.

The service is said by AWS to be the fastest distributed SQL database, delivering reads and writes up to four times faster than other popular distributed SQL databases. Aurora DSQL does so through an “active-active architecture” that allows applications to read and write from any endpoint to ensure high availability and resilience.

To support growing workloads, the service also scales automatically to meet any workload demand without requiring database sharding or instance upgrades, maintaining consistent performance even as usage grows.

Aurora DSQL additionally assists database processing by addressing two critical challenges — achieving multi-region strong consistency with low latency and synchronizing servers with microsecond accuracy. Aurora DSQL decouples transaction processing from storage to allow parallelized writes across regions for fast, consistent performance and leverages Amazon Time Sync Service to synchronize operations globally with microsecond-level accuracy.

In an example provided by AWS, Razorpay Software Pte. Ltd., one of India’s largest fintech companies, plans to use Aurora DSQL to power scalable, resilient applications for its rapidly growing user base. Aurora DSQL’s multi-region strong consistency is critical for financial use cases requiring high precision, enabling Razorpay to operate efficiently on a global scale.

“Aurora removes the need for customers to make trade-offs by providing the performance of enterprise-grade commercial databases with the flexibility and economics of open source,” Ganpathy Krishnamoorthy, vice president of database services at AWS, said in a statement. “Now, we’re reimagining the relational database again to deliver strong consistency, global availability and virtually unlimited scalability, without having to choose between low latency or SQL.”

Announced alongside Amazon Aurora DSQL, Amazon DynamoDB has received an upgrade with the introduction of strong consistency for global tables. The addition leverages the same technology as Aurora DSQL to allow applications to achieve consistent, low-latency performance across multiple regions while maintaining DynamoDB’s scalability and zero infrastructure management.

With the update to DynamoDB, multi-region applications can reliably access the most current data without requiring any code changes. Through a combination of strong consistency with its serverless architecture and single-digit millisecond latency, DynamoDB offers a strong solution for globally distributed, high-performance workloads.

Image: SiliconANGLE/Ideogram

Your vote of support is important to us and it helps us keep the content FREE.

One click below supports our mission to provide free, deep, and relevant content.  

Join our community on YouTube

Join the community that includes more than 15,000 #CubeAlumni experts, including Amazon.com CEO Andy Jassy, Dell Technologies founder and CEO Michael Dell, Intel CEO Pat Gelsinger, and many more luminaries and experts.

“TheCUBE is an important partner to the industry. You guys really are a part of our events and we really appreciate you coming and I know people appreciate the content you create as well” – Andy Jassy

THANK YOU

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.


Revolutionizing AI database integration with MongoDB and AWS – SiliconANGLE

MMS Founder
MMS RSS

Posted on mongodb google news. Visit mongodb google news

As artificial intelligence reshapes industries, AI database integration has become a cornerstone for connecting advanced AI capabilities with practical, real-world applications.

Innovations in this space empower developers to simplify data usability and scalability, most notably in AI-driven projects.

Alan Chhabra, executive vice president, partners, at MongoDB, talks with theCUBE about AI database integration at the “Cloud AWS re:Invent” 2024 event.

MongoDB’s Alan Chhabra talks with theCUBE about the company’s collaboration with AWS, the role of databases in enabling AI applications, and the MongoDB AI Applications Program.

“Our founders built their own modern database, because they wanted to make it easier to use data, whether it was for metadata use cases, operational and, today, vector data use cases,” said Alan Chhabra (pictured), executive vice president, partners, at MongoDB Inc. “We have hundreds of thousands of applications using MongoDB around the world [and] 50,000 paying customers. The hyperscalers … have done a great job creating an accelerator for customers [and] developers to get access to products like MongoDB and for MongoDB to be able to give them tools with [a] great experience.”

Chhabra spoke with theCUBE Research’s John Furrier for theCUBE’s “Cloud AWS re:Invent coverage,” during an exclusive broadcast on theCUBE, SiliconANGLE Media’s livestreaming studio. They discussed MongoDB’s collaboration with Amazon Web Services Inc., the role of databases in enabling AI applications, and the introduction of the MongoDB AI Applications Program.

A new era for AI database integration

Amazon’s recent focus on foundational services, such as compute, storage and databases, underscores the importance of AI inference as a pivotal building block, according to Chhabra. MongoDB’s innovative AI Applications Program simplifies AI database integration by offering blueprints for developers to connect databases, language models and infrastructure.

“The MongoDB AI Applications Program takes partners, some competitors … and brings them together to give customers a blueprint,” Chhabra explained. “You need a blueprint for how to connect MongoDB via LangChain to Bedrock running on AWS with a data warehouse layer of Redshift.”

By collaborating with industry giants such as AWS, Google LLC and Microsoft Corp., along with consulting leaders such as McKinsey and Co. and Capgemini SE, the program accelerates the transformation of AI experiments into production-ready applications. These collaborations aim to deliver faster return on investment while tackling challenges such as data integration and operational scalability, according to Chhabra.

“The more of these blueprints, these recipes we can give to customers, the faster they get applications to production,” he said. “Today, we expanded our program to include Capgemini, McKinsey, IBM and Confluence, adding their own flavors to these recipes.”

Here’s the complete video interview, part of SiliconANGLE’s and theCUBE’s “Cloud AWS re:Invent coverage”:

Photo: SiliconANGLE

Your vote of support is important to us and it helps us keep the content FREE.

One click below supports our mission to provide free, deep, and relevant content.  

Join our community on YouTube

Join the community that includes more than 15,000 #CubeAlumni experts, including Amazon.com CEO Andy Jassy, Dell Technologies founder and CEO Michael Dell, Intel CEO Pat Gelsinger, and many more luminaries and experts.

“TheCUBE is an important partner to the industry. You guys really are a part of our events and we really appreciate you coming and I know people appreciate the content you create as well” – Andy Jassy

THANK YOU

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.


Nexa AI Unveils Omnivision: A Compact Vision-Language Model for Edge AI

MMS Founder
MMS Robert Krzaczynski

Article originally posted on InfoQ. Visit InfoQ

Nexa AI unveiled Omnivision, a compact vision-language model tailored for edge devices. By significantly reducing image tokens from 729 to 81, Omnivision lowers latency and computational requirements while maintaining strong performance in tasks like visual question answering and image captioning. The model’s architecture integrates a Qwen-2.5-0.5B language backbone, a SigLIP-400M vision encoder, and an optimized projection layer to ensure seamless processing of multimodal inputs.

Omnivision’s architecture is designed for efficient multimodal processing, featuring three core components. The Qwen-2.5-0.5B model acts as the backbone for processing text inputs, while the SigLIP-400M vision encoder generates image embeddings from input images. This encoder operates at a resolution of 384 with a 14×14 patch size, optimizing visual data extraction. A projection layer then aligns the image embeddings with the token space of the language model using a Multi-Layer Perceptron (MLP), which allows for streamlined visual-language integration. 


Source: Nexa AI Blog

A key innovation is its 9x reduction in image tokens, reducing processing requirements without compromising accuracy. For example, Omnivision can generate captions for high-resolution images in under two seconds on a MacBook M4 Pro, requiring less than 1 GB of RAM. To ensure accuracy and reliability, it uses Direct Preference Optimization (DPO), leveraging high-quality datasets to minimize hallucinations and enhance prediction trustworthiness.

The model’s training pipeline is structured in three distinct stages. The pretraining phase focuses on aligning visual and textual inputs to establish foundational capabilities. Supervised fine-tuning follows, enhancing the model’s ability to interpret context and generate relevant responses. Finally, Direct Preference Optimization (DPO) refines decision-making by minimizing inaccuracies and improving precision in context-specific outputs.

Omnivision has outperformed its predecessor, nanoLLAVA, in benchmark evaluations across datasets like ScienceQA, MM-VET, and POPE. It achieved notable improvements, including a 71.0% accuracy rate on ScienceQA test data and 93.3% accuracy on the POPE benchmark, demonstrating its reliability in complex reasoning tasks.

Source: Nexa AI Blog

Currently, Omnivision is focused on visual question answering and image captioning. However, Nexa AI revealed plans to expand the model’s capabilities to support optical character recognition (OCR). In a recent Reddit discussion, AzLy shared

Currently, OCR is not one of this model’s intended uses. It is mainly for visual question answering and image captioning. However, supporting better OCR is our next step.

Omnivision can be deployed locally using the Nexa-SDK, an open-source framework that supports a wide range of multimodal tasks. The model is still in early development, and the team is actively gathering feedback from users to guide future improvements.

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.


12 Best Big Data Stocks To Buy According to Hedge Funds – Insider Monkey

MMS Founder
MMS RSS

Posted on mongodb google news. Visit mongodb google news

Artificial intelligence is the greatest investment opportunity of our lifetime. The time to invest in groundbreaking AI is now, and this stock is a steal!

The whispers are turning into roars.

Artificial intelligence isn’t science fiction anymore.

It’s the revolution reshaping every industry on the planet.

From driverless cars to medical breakthroughs, AI is on the cusp of a global explosion, and savvy investors stand to reap the rewards.

Here’s why this is the prime moment to jump on the AI bandwagon:

Exponential Growth on the Horizon: Forget linear growth – AI is poised for a hockey stick trajectory.

Imagine every sector, from healthcare to finance, infused with superhuman intelligence.

We’re talking disease prediction, hyper-personalized marketing, and automated logistics that streamline everything.

This isn’t a maybe – it’s an inevitability.

Early investors will be the ones positioned to ride the wave of this technological tsunami.

Ground Floor Opportunity: Remember the early days of the internet?

Those who saw the potential of tech giants back then are sitting pretty today.

AI is at a similar inflection point.

We’re not talking about established players – we’re talking about nimble startups with groundbreaking ideas and the potential to become the next Google or Amazon.

This is your chance to get in before the rockets take off!

Disruption is the New Name of the Game: Let’s face it, complacency breeds stagnation.

AI is the ultimate disruptor, and it’s shaking the foundations of traditional industries.

The companies that embrace AI will thrive, while the dinosaurs clinging to outdated methods will be left in the dust.

As an investor, you want to be on the side of the winners, and AI is the winning ticket.

The Talent Pool is Overflowing: The world’s brightest minds are flocking to AI.

From computer scientists to mathematicians, the next generation of innovators is pouring its energy into this field.

This influx of talent guarantees a constant stream of groundbreaking ideas and rapid advancements.

By investing in AI, you’re essentially backing the future.

The future is powered by artificial intelligence, and the time to invest is NOW.

Don’t be a spectator in this technological revolution.

Dive into the AI gold rush and watch your portfolio soar alongside the brightest minds of our generation.

This isn’t just about making money – it’s about being part of the future.

So, buckle up and get ready for the ride of your investment life!

Act Now and Unlock a Potential 10,000% Return: This AI Stock is a Diamond in the Rough (But Our Help is Key!)

The AI revolution is upon us, and savvy investors stand to make a fortune.

But with so many choices, how do you find the hidden gem – the company poised for explosive growth?

That’s where our expertise comes in.

We’ve got the answer, but there’s a twist…

Imagine an AI company so groundbreaking, so far ahead of the curve, that even if its stock price quadrupled today, it would still be considered ridiculously cheap.

That’s the potential you’re looking at. This isn’t just about a decent return – we’re talking about a 10,000% gain over the next decade!

Our research team has identified a hidden gem – an AI company with cutting-edge technology, massive potential, and a current stock price that screams opportunity.

This company boasts the most advanced technology in the AI sector, putting them leagues ahead of competitors.

It’s like having a race car on a go-kart track.

They have a strong possibility of cornering entire markets, becoming the undisputed leader in their field.

Here’s the catch (it’s a good one): To uncover this sleeping giant, you’ll need our exclusive intel.

We want to make sure none of our valued readers miss out on this groundbreaking opportunity!

That’s why we’re slashing the price of our Premium Readership Newsletter by a whopping 70%.

For a ridiculously low price of just $29, you can unlock a year’s worth of in-depth investment research and exclusive insights – that’s less than a single restaurant meal!

Here’s why this is a deal you can’t afford to pass up:

• Access to our Detailed Report on this Game-Changing AI Stock: Our in-depth report dives deep into our #1 AI stock’s groundbreaking technology and massive growth potential.

• 11 New Issues of Our Premium Readership Newsletter: You will also receive 11 new issues and at least one new stock pick per month from our monthly newsletter’s portfolio over the next 12 months. These stocks are handpicked by our research director, Dr. Inan Dogan.

• One free upcoming issue of our 70+ page Quarterly Newsletter: A value of $149

• Bonus Reports: Premium access to members-only fund manager video interviews

• Ad-Free Browsing: Enjoy a year of investment research free from distracting banner and pop-up ads, allowing you to focus on uncovering the next big opportunity.

• 30-Day Money-Back Guarantee:  If you’re not absolutely satisfied with our service, we’ll provide a full refund within 30 days, no questions asked.

Space is Limited! Only 1000 spots are available for this exclusive offer. Don’t let this chance slip away – subscribe to our Premium Readership Newsletter today and unlock the potential for a life-changing investment.

Here’s what to do next:

1. Head over to our website and subscribe to our Premium Readership Newsletter for just $29.

2. Enjoy a year of ad-free browsing, exclusive access to our in-depth report on the revolutionary AI company, and the upcoming issues of our Premium Readership Newsletter over the next 12 months.

3. Sit back, relax, and know that you’re backed by our ironclad 30-day money-back guarantee.

Don’t miss out on this incredible opportunity! Subscribe now and take control of your AI investment future!

No worries about auto-renewals! Our 30-Day Money-Back Guarantee applies whether you’re joining us for the first time or renewing your subscription a year later!

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.


New Amazon DynamoDB zero-ETL integration with Amazon SageMaker Lakehouse – AWS

MMS Founder
MMS RSS

Posted on nosqlgooglealerts. Visit nosqlgooglealerts

Voiced by Polly

Amazon DynamoDB, a serverless NoSQL database, has been a go-to solution for over one million customers to build low-latency and high-scale applications. As data grows, organizations are constantly seeking ways to extract valuable insights from operational data, which is often stored in DynamoDB. However, to make the most of this data in Amazon DynamoDB for analytics and machine learning (ML) use cases, customers often build custom data pipelines—a time-consuming infrastructure task that adds little unique value to their core business.

Starting today, you can use Amazon DynamoDB zero-ETL integration with Amazon SageMaker Lakehouse to run analytics and ML workloads in just a few clicks without consuming your DynamoDB table capacity. Amazon SageMaker Lakehouse unifies all your data across Amazon S3 data lakes and Amazon Redshift data warehouses, helping you build powerful analytics and AI/ML applications on a single copy of data.

Zero-ETL is a set of integrations that eliminates or minimizes the need to build ETL data pipelines. This zero-ETL integration reduces the complexity of engineering efforts required to build and maintain data pipelines, benefiting users running analytics and ML workloads on operational data in Amazon DynamoDB without impacting production workflows.

Let’s get started
For the following demo, I need to set up zero-ETL integration for my data in Amazon DynamoDB with an Amazon Simple Storage Service data lake managed by Amazon SageMaker Lakehouse. Before setting up the zero-ETL integration, there are prerequisites to complete. If you want to learn more on how to set up, refer to this Amazon DynamoDB documentation page.

With all the prerequisites completed, I can get started with this integration. I navigate to the AWS Glue console and select Zero-ETL integrations under Data Integration and ETL. Then, I choose Create zero-ETL integration.

Here, I have options to select my data source. I choose Amazon DynamoDB and choose Next.

Next, I need to configure the source and target details. In the Source details section, I select my Amazon DynamoDB table. In the Target details section, I specify the S3 bucket that I’ve set up in the AWS Glue Data Catalog.

To set up this integration, I need an IAM role that grants AWS Glue the necessary permissions. For guidance on configuring IAM permissions, visit the Amazon DynamoDB documentation page. Also, if I haven’t configured a resource policy for my AWS Glue Data Catalog, I can select Fix it for me to automatically add the required resource policies.

Here, I have options to configure the output. Under Data partitioning, I can either use DynamoDB table keys for partitioning or specify custom partition keys. After completing the configuration, I choose Next.

Because I select the Fix it for me checkbox, I need to review the required changes and choose Continue before I can proceed to the next step.

On the next page, I have the flexibility to configure data encryption. I can use AWS Key Management Service (AWS KMS) or a custom encryption key. Then, I assign a name to the integration and choose Next.

On the last step, I need to review the configurations. When I’m happy, I choose Next to create the zero-ETL integration.

After the initial data ingestion completes, my zero-ETL integration will be ready for use. The completion time varies depending on the size of my source DynamoDB table.

If I navigate to Tables under Data Catalog in the left navigation panel, I can observe more details including Schema. Under the hood, this zero-ETL integration uses Apache Iceberg to transform related to data format and structure in my DynamoDB data into Amazon S3.

Lastly, I can tell that all my data is available in my S3 bucket. 

This zero-ETL integration significantly reduces the complexity and operational burden of data movement, and I can therefore focus on extracting insights rather than managing pipelines.

Available now
This new zero-ETL capability is available in the following AWS Regions: US East (N. Virginia, Ohio), US West (Oregon), Asia Pacific (Hong Kong, Singapore, Sydney, Tokyo), Europe (Frankfurt, Ireland, Stockholm).

Explore how to streamline your data analytics workflows using Amazon DynamoDB zero-ETL integration with Amazon SageMaker Lakehouse. Learn more how to get started on the Amazon DynamoDB documentation page.

Happy building!
Donnie

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.


AI services ecosystem grows with MongoDB cross-industry alliances – IT Europa

MMS Founder
MMS RSS

Posted on mongodb google news. Visit mongodb google news

MongoDB, the developer database, has added a new group of organisations to its AI development and services effort, the MongoDB AIApplications Program (MAAP) ecosystem.

MAAP was launched this summer, with founding members Accenture, Anthropic, Anyscale, Arcee AI, AWS, Cohere, Credal, Fireworks AI, Google Cloud, gravity9, LangChain, LlamaIndex, Microsoft Azure, Nomic, PeerIslands, Pureinsights, and Together AI. It offers customers an array of resources to put AI applications into production: reference architectures and an end-to-end technology stack that includes integrations with leading technology providers, professional services, and a unified support system to help customers quickly build and deploy AI applications.

Capgemini, Confluent, IBM, QuantumBlack, AI by McKinsey, and Unstructured have now all joined MAAP, giving enterprises additional integration and solution options. The MAAP Center of Excellence Team, a cross-functional group of AI experts at MongoDB, has collaborated with partners and customers across industries to overcome an array of technical challenges, empowering organisations to build and deploy AI applications.

MongoDB is also now collaborating with Meta on the Llama large language model platform to support developers in their efforts to build more efficiently and to best serve customers. Customers are leveraging Llama and MongoDB to build “innovative and AI-enriched applications”, said the partners.

“At the beginning of 2024, many organisations saw the immense potential of generative AI, but were struggling to take advantage of this new, rapidly evolving technology. And 2025 is sure to bring more change, and further innovation,” said Greg Maxson, senior director of AI GTM and strategic partnerships at MongoDB. “The aim of MAAP, and collaborations with industry leaders like Meta, is to empower customers to use their data to build custom AI applications in a scalable, cost-effective way.”

“Business leaders are increasingly recognising generative AI’s value as an accelerator for driving innovation and revenue growth. But the real opportunity lies in moving from ambition to action at scale. We are pleased to continue working with MongoDB to help deliver tangible value to clients and drive competitive advantage by leveraging a trustworthy data foundation, thereby enabling gen AI at scale,” said Niraj Parihar, CEO of insights and data global business line and member of the group executive committee at Capgemini. “MAAP helps clients build gen AI strategy, identify key use cases, and bring solutions to life, and we look forward to being a key part of this for many organisations.”

“We are pleased to see how many enterprises are leveraging our open source AI models to build better solutions for their customers and solve the problems their teams are facing every day,” added Ragavan Srinivasan, VP of product at Meta. “Leveraging our family of Meta models and the end-to-end technology stack offered by the MongoDB AI Applications Program demonstrates the incredible power of open source to drive innovation and collaboration across the industry.”

In another useful integration, for both database admins and application managers, Datadog, the monitoring and security platform for cloud applications, has announced its Database Monitoring product now observes MongoDB databases. Database Monitoring now supports the five most popular database types: MongoDB, Postgres, MySQL, SQL Server and Oracle.

Traditional monitoring tools typically only allow organisations to monitor either their databases or their applications. This can lead to slow and costly troubleshooting that results in frustration from database and application teams, extended downtime and a degraded customer experience.

Datadog Database Monitoring enables application developers and database administrators to troubleshoot and optimise inefficient queries across database environments. With it, teams can easily understand database load, pinpoint long-running and blocking queries, drill into precise execution details and optimise query performance to help prevent incidents and spiralling database costs.

“Replication failures or misconfigurations can result in significant downtime and data inconsistencies for companies, which may impact their application performance and reliability. That’s why maintaining high availability across clusters with multiple nodes and replicas is critical,” said Omri Sass, director of product management at Datadog. “With support for the top five database types in the industry, Database Monitoring gives teams complete visibility into their databases, queries and clusters so that they can maintain performant databases and tie them to the health of their applications and success of their businesses.”

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.


Presentation: Production Comes First – An Outside-In Approach to Building Microservices

MMS Founder
MMS Martin Thwaites

Article originally posted on InfoQ. Visit InfoQ

Transcript

Thwaites: My name is Martin Thwaites. I’m first and foremost an observability evangelist. My approach to building systems is about how do we understand them, how do we understand them in production. I also work for a company called Honeycomb. A couple years before I worked for Honeycomb, I was contracted to a bank. I was brought in to start looking at a brand-new system for the bank: core banking systems, ledgers, all of that stuff, writing them from scratch, which is a task. We started to understand when we started building it, that the thing that was really important to them was about correctness at a system and service level. They didn’t really care about code quality. They didn’t care about database design. All they really cared about was the system was correct. What that came to was us trying to understand that actually the problem that we were trying to solve was that production returned the right data, and that was a little bit liberating.

Testing (Feedback Loops)

Some people may recognize this diagram. This was a 2020 article that Monzo Bank put out. That wasn’t the bank I was working with. This is a view of their microservices, all 1500 of them. When they put it out, it caused a little controversy. I think there was a lot of developers out in the world that looked at this with fear of, I struggle to keep the class that I’m developing in my head, never mind all 1500 microservices. Because I’ve been in this industry for a while, and that’s the system I started working on. It had a box, and it had a cylinder. There was a person, they hit my website, and that website loaded things from a database and put stuff back in a database, which was incredibly easy to reason about.

That was really hard for me to get my head around when we start thinking about large microservices systems, where we’ve got lots of independent systems that do independent little things. Trying to equate them to a time when I could write a test against my productions of my blue box, in this scenario, where it would test a couple classes, and I would feel a lot of confidence that my system is going to work, because I could run the entire thing locally. Can you imagine trying to run that on your machine? I’m pretty sure that an M3 Max Pro thing won’t do it either. You just can’t.

The issue is that now our systems look a little bit more like this. We have some services. Users may hit multiple services. You may have an API gateway in there. This is not meant to be a system that I would design. This is meant to be a little bit of a pattern that we’re going to talk about. We’ve got independent systems. Some of them are publicly accessible. Some of them aren’t. We’ve got some kind of message bus that allows us to be able to send things between different systems asynchronously. We’ve got synchronous communication, asynchronous communication, all those things in there. A little bit of a poll.

How many people identify as an application developer, engineer, somebody who writes code that their customers would use and interact with, as opposed to maybe a DevOps engineer or an SRE? This is a talk about testing. It’s really a talk about feedback loops, because testing is a feedback loop of how we understand our systems. If we were to take a developer, the fastest feedback loop that we have is a linter. It will tell us whether our code is formatted correctly, whether we’re using the right conventions. It will happen really fast. It happens as you type. You don’t really get much faster than that. You’re getting really rapid feedback to know whether you’re developing something that is correct.

The next time we have feedback is the compiler, if we’re running in a compiled language. We will compile all of those different classes together, and it will tell us, no, that method doesn’t exist on that class. If we’re using languages that do support compilation. Again, that’s really fast, depending on what language you’re using and depending on how bad the code is. It is a fast feedback loop. We’re up to seconds at this point. The next feedback loop that we have is developer tests, the test that you write as a developer against your application. I’m specifically not mentioning two types of testing that would fall into that bracket, because they cause controversy if you call one thing another thing, and another thing another thing. We’ll come on to what those are.

Then, one, we’ve got our developer tests. We’re talking now maybe multiple seconds, maybe tens of seconds, depending on how big your tests are, how many tests you have that are running, how fast those tests run. We’re still local machine here. We’re still able to get some really rapid feedback on whether our system is doing supposedly what we’ve been asking it to do. Because, let’s face it, computers only do what we ask them to do. There aren’t bugs. There are just things that you implemented incorrectly, because computers don’t have a mind of their own yet.

The next thing we have is, I’ll call them end-to-end tests. There’s lots of different words that you might use for these, but where we test a user flow across multiple different services or systems to ensure that things are running properly. This is where we add a lot of time. These are tests that can take minutes and hours to run, but we’re still getting feedback in a fast cycle. From there, we have production telemetry. I told you I’ll mention observability.

We have production telemetry, which is telling us how that system is being used in production, whether there are errors, whether things are running slow. Again, this is a longer feedback loop. Each of these goes longer. Then, finally, we have customer complaints, because that is a feedback loop really. Customers are very good at telling you when things don’t go right, they just don’t do it fast enough for me. We’ve got all of these feedback loops, but they all take longer. Each different one of these is going to take longer. It’s not something you can optimize. It is something that’s just going to take longer.

Now we get into something that’s a little bit more controversial when we talk about developer tests. A lot of people would see developer tests as methods, testing each individual method that we’ve got in our system. We might call these unit tests, coded tests. There’s lots of different words that you might use for them. Beyond that, we go a little bit further out, and we have classics, an amalgamation of multiple different methods. There are some people who call these integration tests. I do not agree, because integration test is not a thing. It’s a category of a thing. If we go even a bit further out than that, we’ve then got things like controllers and handlers, if we’re using messaging contracts or CQRS, that will bring together multiple classes and test them together as a bit of functionality. Then we can go even a further step beyond there.

Then we’ve got API endpoints, messages, events, the external interactions of our system. Essentially, the connection points into our system. Because, ultimately, on the outside there, that’s the only thing that matters. We can write tests at the method level. I would imagine that all those people who put their hand up before have likely got a class inside of their code base, or a method inside of their code space that has way more unit tests than it needs. They’ve spent hours building those tests. If you go and talk to them about it, it is the pinnacle of developer excellence, this class. With all of these unit tests, it’s never going to fail. I come from a world where we’ve got things like dependency injection. What will happen is, you’ll do that class, you’ll make it amazing.

Then you’ll try and run the application and realize, I didn’t add that to dependency injection, so nothing works now. I normally ask the question of how many people have deployed an application and realized they hadn’t added it to dependency injection. Now I just assume that everybody has, because everybody puts their hand up, because we’ve all done it. Because the reality is, when we’re writing tests at that level, we’re not really testing what’s useful. It’s my favorite meme that exists. I’m sure both of those drawers worked, but as soon as we try and pull them together, they don’t. It doesn’t matter how many tests you write against your methods and your classes and even your handlers and your controllers, because the only thing that matters is those connection points at the top. No CEO is going to keep you in your job when you say, all of my unit tests passed. I didn’t mean us to lose £4 million.

Getting back to our system, if we look at this example system. We’ve got three services that a customer can hit. We’ve got one service which is essentially fully asynchronous. It has an internal API call. The red lines on here are API calls, the blue lines are messages, not wholly important for what we’re doing. The thing that’s important on this diagram is these things. These are our connection points. I’ll say it again, these are the only things that matter. Inside those blue boxes, nobody cares. Nobody cares if you are writing 400 classes, one class. Nobody cares that you’ve got an interface for every single class that you’ve created. Nobody cares about your factories of factories that deliver factories that create factories. Because, ultimately, unless those connection points that we’re looking at here work independently and together, nobody will care.

Small little anecdote from the bank, we based everything based on requirements. If we got a requirement for something, we’d write the tests and we’d implement them. We get requirements like this, for instance, the product services’ list products endpoint should not return products that have no stock. Very valid requirements. Because it’s a valid requirement, it’s something that you could write a test for. In this diagram, that’s the only two things that matter. On that service, those two connection points are the only two things that matter. You could spend hours building classes internally, or you could spend 20 minutes building one class that does it. You could spend ages building unit tests around that class or those classes, but unless those two endpoints work, you haven’t done the work.

Then there’s another system that is something that we’re going to receive, because the warehouse service should emit messages that contain the new stock level for a product, whenever an order is placed. Again, we’ve got some contracts. These are two independent services. If we have to build them, deploy them together, they’re not microservices. They are independent services. They emit messages. They receive messages. They take API calls, they emit messages. They’re to be treated in isolation, because those are the contracts that we’ve agreed to. Those contracts can’t change, because if they change, the consumers need to change.

Test Driven Development (TDD)

The thing is, ultimately, this is actually a talk about TDD. It’s not a talk about testing in general. It’s actually talking about the TDD workflow, because TDD is not about unit tests. It’s not about testing methods. It’s not about testing classes. It’s not about whether you use JUnit or xUnit, or whatever it is that you’re using for it. That isn’t what makes it a unit test. That isn’t what makes it TDD. It might make it a unit test depending on how you define a unit, which between the U.S. and America, units are different, apparently. Ultimately, TDD is about a workflow. We write a test. We write a test that fails. We write an implementation for that test that makes it pass. Then we refactor, and then we just continue that cycle. If we go back to what I talked about with requirements, ultimately, we’re getting requirements from the business or even from internal architects, or we’ve designed them ourselves to say, this is the contract of our system. What we’ve done is we’ve generated a requirement, which means we can write a test for that requirement.

At the bank, what was really interesting was we got really pedantic about it, which is what I love about it, because I’m a really pedantic person, really. We had this situation for around six months, I think it was. We went live, obviously. We had a situation for about six months where you could spend more than your balance, which apparently is a bad thing in banks. We had the BA come to us and say, “There’s a bug in the platform”. He said, “You can spend more than you balance”. I’m like, “I’m so sorry. Can you point me to the requirement so I can put it on the bug report?” He was like, “There wasn’t a requirement for it. We just assumed that you’d build that”.

The reality was, because there was no requirement for it, we hadn’t built a test. We hadn’t built any tests around that. We’d built something because they said we need to get the balance. We’d built something because they said we need to be able to post a transaction. We hadn’t built anything that said, throw an exception, throw a 500 error, throw a 409 error, throw some kind of error when they spend more than their balance. What that meant was they had to tell us exactly what error message should be displayed under what conditions, and we had to validate that that error message was expressed in those conditions. I’d like to say eventually they came on board, they didn’t. It was a constant battle.

Ultimately, they got this idea that they have to define the requirements, not the implementation. We got them coming a few times, saying, so we need you to add this to the database. Like, we don’t have a database. Like, but I need it in the database. We use event store. It’s not a database. Need to update the balance column, no, stop talking about implementation details, tell me what you need it to do, and we will build it. Which is very important when we talk about legacy systems, because legacy systems, and the way that legacy systems were developed was by that kind of low-level detail. If we talk about working in a TDD way from the outside, where people define requirements and we write tests for those requirements, and then we write the implementation that makes those requirements work.

What’s really cool about that is we don’t develop code that isn’t used. We don’t develop a test or 500 tests that test that a class is bulletproof, where none of those conditions can ever be met. We end up with a leaner code base, which, a leaner code base is easiest to support. It also means you can get 100% code coverage. Because the reality is, if that code isn’t hit by any of your outside-in tests, your API level tests, then one of two things has happened, you’ve either missed a requirement or that code can never be hit. What I’m saying here is not something that I would like anybody to go away and cargo call it and just say, “Martin said that I should just do this, therefore, if I lose my job, I can sue Martin”. No, it’s not the way this thing works.

These are just different gears. We call these gears. We’ve got low level gears, unit tests, methods, classes that allow us to maneuver, but you don’t get very far fast, because you’ve got to do more work. On the outside when we’re testing our APIs, we can run really fast. We can test a lot of detail really fast. Those are your higher gears. It’s about switching gears when you need to. Don’t feel like you need to write tests that aren’t important.

The Warehouse System

If we take, for instance, the warehouse system, essentially what we’re trying to do here is we’re going to write tests that work at this level. We’re going to write tests where what we do is we send in an order placed message. Before that, we’re going to send in some stock received messages. Because there’s a requirement I’ve not told you that was part of the system, which is, when we see, received a stock received message, that’s when we increase the stock levels. Maybe we don’t do an output at that point. Each one of these would be a requirement that would require us to write another test.

If somebody came to me with this requirement of saying, put in the order placed message and send out the new stock, I’d say it’ll fail at the moment because there’s no stock. What’s the requirement? When I get new stock, I need to increase the stock. We start to build up this idea of requirements. We get traceability by somebody telling us what our system is supposed to do and why it’s supposed to do it, which means we build up documentation. I know everybody loves writing their own documentation against your classes and all of that stuff, writing those big Confluence documents. Everybody loves doing that? That’s pretty much my experience.

Ultimately, when we’re building these things from requirements, the requirements become our documentation. We know who requested it, why they requested it, ultimately, what they were asking it to do, not what it’s doing. When we place these two things in, we then check to make sure that we’ve received a stock received message. That’s all that test should do. A lot of people would call this integration testing. I don’t agree. I call these developer tests. The reason I call them developer tests is because we write these things in memory. We write these things against an API that we run locally against our service.

The developers write these, not some external company, not some person who you’ve just hired to go and sit on a desk, not some intern. The person who’s writing this code, the implementation, has first wrote these tests that will fail. Then once they’ve failed, they’ll write the implementation to make them pass. It’s that simple. If there’s a requirement that you think is something that should be built, you go back to the business and say, “I think this should be a requirement”. “Yes, I agree. What’s the requirement? Write the requirement. Now go and write the test”. You could call this RTDD, Requirements Test Driven Development, maybe.

Ultimately, what we’re doing here is we’re testing to make sure that the things that happen in production produce the right outcomes that should happen in production. One of the things I see as an antipattern when people start doing this is they do this. They’ll go and inject a load of products into the SQL Server, into the database, into whatever it is that you’re using as your datastore, as part of their test setup, as part of preceded data. I’m going to take a wild guess that that’s not the way it happens in production, that when you get stock, somebody doesn’t craft some SQL queries and increase the stock.

Ultimately, that’s not what you’re expecting to happen. What you’re expecting to happen is you might expect something to happen where the database already has some data. That’s not how it’s going to happen in production. You get into this step of your tests being tightly coupled to your database schema when they shouldn’t be. Because if you have to change your test when you write some new code, you can no longer trust that test. You don’t know whether that test is right. It was right, but now you’ve changed something in that test. Is it still right? Yes, because I don’t write bad code. Unfortunately, that’s not something that people believe. Ultimately, what we’re trying to do here is mimic what a production system does in every single test that we do.

We had, when we built this, around 8000 of these tests per service, and they ran in under 10 seconds. For context, we run in .NET when we did this. .NET has something called a WebApplicationFactory, which runs up our entire API in memory, so there is no network calls, because as soon as you add a network call, you run in at least a millisecond. You need to think about how you test this. It’s not just, let’s run some test containers and run some Newman tests against these test containers. That’ll do it. That isn’t how we do it. You have to think about it. You have to spend the time to build the frameworks that allow you to test this way.

Ultimately, when you have those 8000 tests, you have a ton of confidence. It is a journey. We had a team that had built this and then decided that their entire internal implementation was wrong when a new requirement came in. The database design that they’d come up with just didn’t work for this new thing. They rewrote everything, the entire blue box, rewrote all of it. Contracts were the same on the outside, because we’re still going to get an order placed message. We’re still going to get stock received messages, and we still need to output the stock changed messages. They did that, and then all the tests passed. They spent two days procrastinating because they didn’t feel confident, because they’d rewrote the entire internal implementation, but the test still passed.

I think that goes to show that when we’re writing and we’re writing so much code, we don’t have confidence that we can deploy things, because what we’re doing is we’re designing our tests. We’re designing our confidence tests around our local environment or at too lower level. We’re not going to the outside. We’re not testing what production wants. We’re not testing what the business wants. We’re testing the code that we wrote. They eventually deployed it. It all worked. It was fine. I think that really goes to show that you should really think about these tests. Once you get that confidence, you can run really fast with a lot of confidence. This is how you get to these phases of people who are deploying per commit. Because if your pipeline can run all of these tests, and you can have 100% confidence that every requirement that you had to achieve before is achieved now, just deploy it. Your new stuff might not be right, but put that behind the feature flag. As long as all the old stuff still works, just deploy it, test in production.

Observability

Ultimately, though, there are things that we can’t test from the outside, because from the outside, some of the things that we do may look the same. We may say, do a thing, and the outcome may be the same, but the internals of what we expected might be different. We can’t do that from an outside-in testing perspective, but there is another way, because this is actually a talk about observability. What do we mean by observability? This is a quote from our founder. Observability actually comes from something called control theory from the 1960s, it’s not new. It’s not something that the logging and metrics vendors came up with about seven years ago. It’s something that’s ancient, because there is nothing new in IT, apparently. Ultimately, observability is about understanding and debugging unknown-unknowns.

The ability to understand the inner system state just from asking questions from the outside. That’s the software definition based on Cummings paper on controllability. I want to focus on one part of that, which is the ability to understand the inner system state, any inner system state. Because I said there’s things that we can’t test from the outside, but are important for us to know that they went through the right approaches. When we were writing things for production, we really need to know about how our software is going to work in a production environment. That’s really important to us. That’s where we do things like tracing, and we get things like this, which is a basic trace waterfall.

Ultimately, the business only cares about that top line, the outside. They care about how long it takes. They care about it returned the correct data. You as an engineer, someone who’s supporting that system, may care about either the whole waterfall or just some individual sections of that waterfall. You may just care about your service, your checkout service, maybe that’s the one that you’re looking after, maybe the cart service, maybe you’re looking after two of those services. This is what allows us to see inner system state, and this is what we see when we’re in production.

What if we could use that locally? We call this something called observability driven development, which is how we look at the outside of a big service, the big system. How do we use that information to help drive our development flows, to help drive more requirements, and therefore more tests and more implementations and more refactoring? I’ve got an example. Don’t try and work out the language. I specifically talk about six different languages, try and munge together the syntax so that nobody thinks that I’m favoriting one particular language. There may be a test afterwards to spot all the different design patterns. Let’s say we’ve got a GetPrice for a product, and we use pricing strategies based on the product ID. Maybe the product ID has a different pricing strategy on there.

Those pricing strategies are something that we use to calculate the new price of a product. If two of those pricing strategies somehow converge, maybe one of them is a 10% markup, and one of them is a £1 markup. If my product is £10, they’re both going to come out with the same outcome. From an outside, I don’t know whether that is the right pricing strategy that has been used. Ultimately, it’s not just something I want to know in my tests. It’s something I want to know about my system when it’s running as well, because if it’s important enough for you to know whether it’s correct in your tests, and if we’re writing tests from the outside to understand our system, it’s important enough for you to give to either the people supporting your system or yourself, if that’s you supporting that system.

Ultimately, I’d like to think that everybody treats the people supporting their system as if they were themselves anyway. We’re not in a world anymore where we throw it over the wall and somebody else can sort that. Like, “I’ve paid my dues. I’m going home, I’m going to the pub”. We’re not in that world anymore. We need to be kind to ourselves about how we understand how the systems work in production.

We can use those same concepts in our local development because, let’s say we were writing a test to say let’s make sure our GetProduct endpoint, when it’s got a valid product, uses the right strategy. How would we do that? How would we call our ecomService API from the outside our GetProduct? Imagine this is a wrapper around our API that we’ve built inside of our test. How do we test to make sure it’s using the right strategy? This is where we use either something called tracing, or we use logs, or we use some kind of telemetry data that should be emitted in production to test locally. I use tracing. I think it’s superior, but doesn’t mean you have to. Logs are just as useful in this circumstance. What we can do is we can say, let’s get the current span that’s running, and then let’s set our product strategy ID on our span.

What that means is, when we go and then write the test, now we can go and say, go and work out what spans were emitted for this particular test. Then make sure that the strategy ID has come out, and then make sure it’s using the right strategy ID. It sounds simple, and that’s because it is. It does however take work. This is not something where you’re just going to be able to take it out the box, open up a C# file, or a Java file, and just write something in. What we found when we were writing things at the bank and the new people that we brought on, is this was a big knee jerk reaction to people going, no, that’s not the way we build things in finance. It’s like there’s a reason for that, because we’ve built things better when we’re not in finance.

Ultimately, there’s a lot of legacy that comes in with big bank finance systems, that kind of stuff. These are new patterns, but they’re different strings to your bow. They’re not something that can be used in isolation. You’re not going to get everything by doing these things, but you can do a lot of things.

When you do things like these, actually, when you’re writing your tests and you’re running your tests, you can actually see what that tracing data is going to look like, what the log data is going to look like if you in your local environments push to a system like, Microsoft have just released Aspire for the .NET people, that allows you to push stuff and see all of your telemetry data locally. There’s Jaeger, there’s OpenSearch, there’s lots of things that you can use, but you’re essentially now being able to see that data. The other thing that we found when we started writing software like this, very few people actually run the software. Very few people actually run it locally.

They just run the tests, because the tests were actually doing what they would do themselves. They don’t have to craft a message, stick it on service bus, stick it in SQS. I just put it in the test, and the test tells me it works. If you imagine how much time you spend hitting play on your IDE, letting that thing run, go into your Swagger doc, putting in the information, and hitting play. Or even just pressing play and hitting a HTTP doc and hitting the send request on those. If you could get around all of that, and you could test all of them all the time, how much more efficient would you be? Because what you’ve done is you’ve built that system so it works in production, not locally, not your local classes, not your local methods. You’ve built it so it works in production. This talk is actually about writing fewer tests, because you can write fewer tests on the outside that test more things than you can on the inside by writing unit tests, by writing those method level tests.

Key Takeaways

I want to leave you with a couple of thoughts. The first one is, don’t cargo call this. Don’t take this away and say this is the thing that we’re going to do now, we’re not going to do anything else. Think about which gear you’re in. Think about whether you need to move down gears. Don’t just move down gears, move up them as well. Can I write a test at the controller level? Can I write a test at the API level? Think about what extra things you’re testing as you go to the outside. As an example, if you’re at an API level and you test things, you’re actually testing serialization and deserialization. Because, how many times have we seen somebody changing the casing of a JSON object? Think about what gear you’re in. Think about what you’re trying to test. Think about what your outcomes are that you’re looking for.

Think about whether this is the right gear for the test that you need to write. When you’re doing that, write the tests that matter. It does not matter that you have a test that sets a property on a class and make sure you can get that property back. I can see a lot of people going, I’ve got loads of those. They’re not that useful. Don’t make your applications brittle. The more tests we write against methods and classes, the more brittle our application framework becomes, because as soon as we try to make a change, we’ve got to change tests. Those tests cascade. Finally, think about whether you’re covering your requirements, the requirements that the business have put on you. Think about that, because that’s the most important thing. The requirements are what matter in production. If you’re not testing the requirements, you’re not building for production.

Questions and Answers

Participant 1: How do we know that these techniques will actually ensure that our applications are easier to debug, and then they’re primed for use in production.

Thwaites: I think it’s really about the observability side, because if you’ve been able to debug something locally, and you’ve been using the observability techniques to do that, you’ve essentially been debugging your production system anyway when you’ve been writing the software. Because while you’ve been debugging when a message comes in and when a message goes out, that’s what you’ve been debugging, and that’s all that’s happening in production. That’s the difference, because if you debug a unit test locally, you’re debugging a unit test, you’re not debugging an application, you’re not debugging a service. You’re not debugging a requirement or something that would happen in production.

Participant 2: If you have a use case or a requirement that also involves a different service doing its thing, how would you test that? If the answer is smoking that service, how would you handle changes to that service’s requirements?

Thwaites: If we’ve got multiple services that are interacting together to achieve something, how do we test that scenario?

Ultimately, you shouldn’t care about that other service. That’s that service’s job to maintain its contract. Each of those connection points that we’re talking about is a contract that you’ve delivered to somebody. You can’t change that contract, because that will break things. You might own both services, but we work at a service level. Your tests in your service should make sure that that contract never changes, or, more specifically, never unknowingly changes. You might want to change it, but as soon as your tests fail on those contracts, you know that your consumer is going to fail. If you’ve got to change your tests, you’re going to have to tell consumers that they need to change their implementation. You shouldn’t care about what other service is doing. That’s that service’s job. What you should know about is, I know the contract that that service is going to give me. Let’s take an API contract.

The example I gave before was the checkout service is going to check the stock live via an API call into the warehouse service. In that scenario, you know what the contract of the warehouse service is going to be for that call, or you should put a mock or a stub, more specifically, into that service that says, when I call for these specific details, I expect you to give me this specific response. Because that’s the pre-built contract that you’ve agreed with that service. If that service changes, that’s on that service, that service is now broken, but it’s that service’s job to do the same thing. If you want to do that, then you’ve got to do that with every single one of them. I can tell you that 1500 microservices locally is not the thing you want to do.

You’ve got to take each of these services individually. You’ve got to make sure that everybody buys into this approach, that we are not going to change our contracts, or that we are going to support that contract. If you do that as an organization, not only do you get the confidence that internal consumers are not going to break. You can also use this for external consumers as well. Because we had a discussion in the unconference about multiple different external consumers that you don’t control, as soon as it’s public, you’re going to have to support it. API contracts are for life, not just a major release.

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.


Physical Intelligence Unveils Robotics Foundation Model Pi-Zero

MMS Founder
MMS Anthony Alford

Article originally posted on InfoQ. Visit InfoQ

Physical Intelligence recently announced π0 (pi-zero), a general-purpose AI foundation model for robots. Pi-zero is based on a pre-trained vision-language model (VLM) and outperforms other baseline models in evaluations on five robot tasks.

Pi-zero is based on the PaliGemma VLM, which was then further trained on a custom dataset collected from 7 different robots performing 68 tasks as well as the Open X-Embodiment dataset. The resulting base model can accept natural language commands and perform tasks “at rudimentary proficiency.” The Physical Intelligence researchers compared pi-zero’s performance to two baseline models, OpenVLA and Octo, on five different tasks, including folding laundry and bussing a table; pi-zero achieved “large improvements” over the baselines. According to Physical Intelligence:

The frontiers of robot foundation model research include long-horizon reasoning and planning, autonomous self-improvement, robustness, and safety. We expect that the coming year will see major advances along all of these directions, but the initial results paint a promising picture for the future of robot foundation models: highly capable generalist policies that inherit semantic understanding from Internet-scale pretraining, incorporate data from many different tasks and robot platforms, and enable unprecedented dexterity and physical capability.

Pi-zero’s architecture is inspired by Transfusion, a model created by Meta and Waymo that operates on tokens representing both discrete and continuous data. In the case of pi-zero, the model has a distinct module that handles robot-specific actions I/O, which the researchers call the “action expert.” The model’s input is a combination of vision images, the robot’s joint angles, and a language command; the output is a sequence of robot action tokens.

For some complex tasks, the human operator’s language command was first fed into a high-level VLM which decomposed it into a sequence of simpler tasks, as done by models like SayCan. The researchers found that this scheme improved performance on tasks such as setting a table. They also found similar improvement when the human operator gave the robot a sequence of simpler commands.

Physical Intelligence co-founder Karol Hausman answered several questions about the model on X. He confirmed that their demo video was not scripted or teleoperated. When asked why his team used folding laundry for evaluating their model, he said:

There are…many reasons why laundry folding is a good task:
– everyone understands if it’s done well
– it’s easy to reset (throw the clothes back in the basket)
– it can be arbitrarily long (multiple items in a row)
– it’s easy to generate diverse data (many clothing items)

Andrew Ng’s The Batch newsletter discussed pi-zero, saying:

One of the team members compared π0 to GPT-1 for robotics — an inkling of things to come. Although there are significant differences between text data (which is available in large quantities) and robot data (which is hard to get and varies per robot), it looks like a new era of large robotics foundation models is dawning.

Several other large players have been developing multimodal foundation models for robotics. Earlier this year, InfoQ covered NVIDIA’s GR00T model, which is trained on video, text, and real robot demonstrations. Last year, InfoQ covered Google’s PaLM-E, a combination of their PaLM and Vision Transformer (ViT) models designed for controlling robots, and Google DeepMind’s Robotics Transformer 2 (RT-2) a vision-language-action (VLA) AI model for controlling robots.

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.