This article is the second in a two-part article series on Kubernetes configuration patterns, which you can use to configure your Kubernetes applications and controllers. The first article introduced patterns and antipatterns that use only Kubernetes primitives. Those simple patterns are applicable to any application. This second article describes more advanced patterns that require coding against the Kubernetes API, which is what a Kubernetes controller should use.
Continue reading Kubernetes configuration patterns, Part 2: Patterns for Kubernetes controllers
Even though cloud-native computing has been around for some time—the Cloud Native Computing Foundation was started in 2015; an eon in computer time—not every developer has experienced the, uh, “joy” of dealing with distributed systems. The old patterns of thinking and architecting systems have given way to new ideas and new problems. For example, it’s not always possible (or advisable) to connect to a database and run transactions. Databases themselves are giving way to events and Command Query Responsibility Segregation (CQRS) and eventual consistency. Two-phase commits are being replaced with queues and database sagas, while monoliths are replaced with microservices, containers, and Kubernetes. “Small and local” thinking rules the day.
Continue reading Building resilient event-driven architectures with Apache Kafka
This article compares two tools, Sanitizers and Valgrind, that find memory bugs in programs written in memory-unsafe languages. These two tools work in very different ways. Therefore, while Sanitizers (developed by Google engineers) presents several advantages over Valgrind, each has strengths and weaknesses. Note that the Sanitizers project has a plural name because the suite consists of several tools, which we will explore in this article.
Continue reading Memory error checking in C and C++: Comparing Sanitizers and Valgrind
The first half of this article described dynamic memory allocation in C and C++, along with some of the new GNU Compiler Collection (GCC) 11 features that help you detect errors in dynamic allocation. This second half completes the tour of GCC 11 features in this area and explains where the detection mechanism might report false positives or false negatives.
Continue reading Detecting memory management bugs with GCC 11, Part 2: Deallocation functions
Recently, I’ve been trying to improve the speed of the Clang compiler for C and C++. When I profile the Clang pre-processing step on a large file, one function quickly stands out:
Continue reading Optimizing the Clang compiler’s line-to-offset mapping
In Part 1 of this series, we discussed the policy framework in Red Hat 3scale API Management—adding policies to the APIcast gateway to customize API request and response behavior. In this article, we will look at adding rate limiting, backend URL protection, and edge limiting policies to the APIcast gateway. We’ll also review which policies are appropriate to use for different use cases.
Continue reading Custom policies in Red Hat 3scale API Management, Part 2: Securing the API with rate limit policies
As a developer, I’m always excited to attend the Kafka Summit, happening this year from May 11 to 12. There are so many great sessions addressing critical challenges in the Apache Kafka ecosystem. One example is how changes to event-driven APIs are leading developers to focus on contract-first development for Kafka.
Continue reading Event-driven APIs and schema governance for Apache Kafka: Get ready for Kafka Summit Europe 2021
The common theme in many time-travel movies is to go back in time to find out what went wrong and fix it. Developers also have that desire to go back in time and find why the code broke and fix it. But, often, that crucial step where everything went wrong happened long ago, and the information is no longer available.
Continue reading Instant replay: Debugging C and C++ programs with rr
OpenMP is an API consisting of compiler directives and library routines for high-level parallelism in C and C++, as well as Fortran. Version 5.1 of OpenMP was released in November 2020 and version 5.0 was released in November 2018. This article discusses the new features from OpenMP 5.0 which are implemented in GCC 11, and some new OpenMP 5.1 features.
Continue reading New features in OpenMP 5.0 and 5.1
The latest versions of Red Hat Software Collections and Red Hat Developer Toolset are available now in beta. Software Collections 3.7 delivers the latest stable versions of many popular open source runtime languages, web servers, and databases natively to the Red Hat Enterprise Linux platform. These components are supported for up to five years, supporting a more consistent, efficient, and reliable developer experience.
Continue reading Red Hat Software Collections 3.7 and Red Hat Developer Toolset 10.1 beta versions now available