Showing posts with label software architecture. Show all posts
Showing posts with label software architecture. Show all posts

Saturday, December 3, 2016

Kubernetes Software Components Architecture Diagram

For a recent innovative project we were able to work with Kubernetes 1.3 as tool for automating deployment, scaling, and management of containerized applications. In our case (micro)services.


A lot of documentation is available, but I was missing an as-complete-as-possible architecture picture of all components within k8s. Or sometimes the link between certain components was not shown, or a related but very relevant component for the system was missing (e.g. Flannel). Below is the result of this: a full components architecture diagram of all components in Kubernetes. It was hard to fit everything in, but I think I have everything for the level of detail I wanted to capture.

The following components can be found in the diagram: kubectl, etcd, master node, worker node, controller manager, scheduler, etcd-watch, API server, Docker, kubeproxy, deployments, container, pod, service, kubelet, label selectors, config maps, secrets, daemon sets, jobs, flannel (for subnet), client app accessing the services.

Let me know in the comments if I'm missing anything! 😊


Inspiration for this diagram came from (amongst other things):

Sunday, December 13, 2009

Best of this Week Summary 07 December - 13 December 2009

Sunday, November 15, 2009

Best of this Week Summary 09 November - 15 November 2009

Sunday, August 23, 2009

Best of this Week Summary 17 August - 23 August 2009

  • Here's a basic list of software architecture review guidelines. You can definitely also use it as a starting point for your documentation, or to see if your documentation is covering it all.

  • Shame on me: forgot to mention last week the VMWare acquisition of SpringSource! Basically the CTO says "the aim of this acquisition is to provide a comprehensive platform as a service (PaaS)". Here's a view on it from a technical level by Adrian Colver (SpringSource), and here's one from Frank Cohen.

  • Potential cloud "dangers" described during Black Hat USA 2009.

  • And related to the previous one, here's a short summary with interesting results on stress testing the Amazon EC2, Google AppLogic and Microsoft Azure cloud solutions. Bascically, the performance quite varied and response times varied by a factor of 20! And good to know: on Google AppEngine, any task can not last longer than 30 seconds!

  • Need to know "everything" about Java Generics? Then this large PDF Java Generics FAQs - Frequently Asked Questions is for you. Think you know everything about Generics? It still might be for you. For example, do you know what this says: "Enum<E extends Enum<E>>"? Or can you follow this one: "Can I use the type parameter of an outer type as part of the bounds of the type parameter of an inner type or a method?"? :)

Sunday, August 9, 2009

Best of this Week Summary 3 August - 9 August 2009

Sunday, July 12, 2009

Best of this Week Summary 06 July - 12 July 2009

Saturday, July 4, 2009

Best of this Week Summary 29 June - 05 July 2009

Sunday, June 21, 2009

Best of this Week Summary 15 June - 20 June 2009

  • Finally I found a good summary of JavaOne 2009 (PDF) by Frank Cohen.
    Two other pretty good summaries can be found here and here. Both are split into days, so some browsing required :)

  • This blogpost describes how's the opensource project MySQL fork Drizzle handling code contributions and testing. Some rules for the 100+ contributors are:

    • No code will be accepted that works by disabling any existing tests

    • It is not allowed to contribute code that causes a compiler warning


  • Here's a nice summary of Google Wave's architecture.

  • This week I performed a short research on tools being able to generate Java classes from XSDs. All I wanted to use it for is generate my domainmodel classes, nothing more, nothing less. No need for Java <--> XML binding/conversions. Another requirement was that the generated code should not contain any dependencies on that tool. Finally, it has to run under JDK 1.4 too :( Because of that last requirement, this summary was already quite handy. Well, I thought the research would be pretty easy, but it wasn't. Actually, in the end I didn't succeed. None of the below tools generate code that has no tool-specific imports. Do you know of any tool that should do it? Let me (us :) know in the comments! Below a summary of my findings:

    • Castor 0.9.x and 1.3: generates classes (no interfaces), with matching Descriptor classes per class that can be used to validate the created object. Imports org.castor.* stuff.

    • XMLBeans 2.4.0 generates interfaces and implementing classes. Both import xmlbeans classes.

    • JAXB 1.0 generates interfaces, implementing classes and runtime classes (haven't figured out what that is exactly). Imports JAXB classes/interfaces.

    • XMLSpy 2006 Enterprise Edition: generates classes. Looks more like you expect, "one class per type". But also needs com.altova.* imports.

Sunday, June 7, 2009

Best of this Week Summary 1 June - 7 June 2009

  • Presentation from the author of POJOs in Action on running Java applications in Amazon's EC2. Shortly describes the opensource project Cloud Tools that can be used to configure Tomcat, MySQL, Apache, JMeter, (cluster) deployment etc. CT also includes AMIs pre-installed with these tools and a Maven and Grails plugin. A couple of sample deployment architectures are shown too. Tiny bit older presentation because it does not mention the AWS Management Console.

  • Of course you know YSlow, which helps you analysing your webpage load time, and then gives you tips on how to improve it. Google has just opensourced its similar tool Page Speed, but with tips based upon different insights. It's a Firefox add-on integrated with Firebug.

  • A 42 minutes presentation by LinkedIn's engineers on exploring the best available technologies which could be used to build its next generation architecture.
    "The new architecture involved using OSGI/Spring DM as the foundation because it had the right properties we were interested in. The code was migrated to a more modular paradigm using binary consumption.
    The session will demonstrate how they integrated OSGi, the pros and cons of the changes, the pain points as well as the migration strategy."

  • Open up your company's data so others can link to it: the next step in the web, and why you should care. As seen by Tim Berners-Lee.

  • Did you know about this cool feature in Java 6 SE: it is possible to make a standalone Java application available as a webservice via the EndPoint class (i.e, via its main() method). Thus: without a container!

Sunday, May 24, 2009

Best of this Week Summary 18 May - 24 May 2009

Sunday, May 10, 2009

Best of this Week Summary 04 May - 10 May 2009

  • Reference to an AJAX framework analysis/comparison result by Matt Raible (for example known for his framework of frameworks: AppFuse). Compared were Dojo, Ext JS, GWT, and YUI. Check also the comments.

  • Beginners level host and Java performance tuning concepts.

  • Handy PHP profiler and debugging tool/library. Helps you with logging, memory usage, double includes, page execution time and database activity monitoring.

  • Nice presentation on scalable web architectures from Cal Henderson, (ex) Flicker architect. Including horizontal vs vertical, architecture, sessions, load balancing, queuing, relational data, caching, H(ighly) A(vailable) data, federation, serving and storing files, CDN, real-world examples.

  • SpringSource has created Roo, a sophisticated round-tripping code generator that should make it quicker and easier to create and evolve Spring applications.

  • Funny: how to measure code quality: WTFs/minute :)


    Via.

  • You as a developer can now go social on IBM's myDeveloperWorks, a social network spun off of developerWorks.

  • An introduction on how one could formalize a SOA using WS-CDL, including a few real-world insurance based uses.

  • Yahoo has just released a major update for their innovative YQL. "The Yahoo! Query Language lets you query, filter, and join data across any web data source or service on the web. Using our YQL web service, apps run faster with fewer lines of code and a smaller network footprint. YQL uses a SQL-like language because it is a familiar and intuitive method for developers to access data. YQL treats the entire web as a source of table data, enabling developers to select * from Internet." The update adds "Execute", with which "developers now have full control of how the data is fetched into YQL and how it’s presented back to the user. With Open Data Tables, developers can build tables that manipulate, change, and sign the URLs to access almost any protected content, allowing YQL access and combining data across a variety of different authenticated services such as Netflix or Twitter. Developers can call multiple services and data sources within Execute to join and mashup data however they desire, letting Yahoo! do the work rather than their applications. Data can be tweaked and manipulated into an optimal format for applications to consume." Another example of what is possible can be found here. Check also this article for more explanations.

Sunday, May 3, 2009

Best of this Week Summary 27 April - 03 May 2009

Sunday, March 22, 2009

Best of this Week Summary 16 March - 22 March 2009

  • Great article by Dion Hinchcliffe with 10 emerging technologies every software architect has to know about. In short:

    1. Cloud computing

    2. Non-relational databases

    3. Next-generation distributed computing

    4. Web-oriented architecture (WOA)

    5. Mashups

    6. Open supply chains via APIs

    7. Dynamic languages (e.g Rails, PHP compared to Java/.Net)

    8. Social computing

    9. Crowdsourcing and peer production architectures

    10. New Application Models (e.g the symantic web, opensocial, widgets)

  • Elaborate explanation of managing boilerplate text (e.g. titles, button labels, prompt, error messages, tool tips) in JSF applications. This includes more advanced locale requirements, like certain text that needs to be different when shown to junior and senior users.

  • Here's a nice diagram with an overview of what activities are needed to create a website, from idea to support and everything in between.


  • Always annoyed that you have to manually close a resource like InputStreams, Connections etc? And that the first exception might be surpressed by the second in the finally block? Here's a suggested solution: the Automatic Resource Management pattern by Joshua Bloch.

  • Ten more Eclipse shortcuts you maybe didn't know...

  • Of course you've heard/read that Microsoft has released IE8 last week. Here's a bunch of tips when migrating your site from IE7 to IE8.

  • Ever need to create a UUID/GUID? Here's a few offline generators compared. uuidgen is an online UUID generator supporting version 1 and 4. A handy FAQ on UUIDs with some more depth can be found here.

Sunday, March 8, 2009

Best of this Week Summary 02 March - 08 March 2009

Sunday, February 15, 2009

Best of this Week Summary 09 February - 15 February 2009

Sunday, January 25, 2009

Best of this Week Summary 20 January - 25 January 2009

Sunday, January 18, 2009

Best of this Week Summary 12 January - 19 January 2009

Saturday, January 3, 2009

My clients are getting thicker and thicker: MVC implementation shift

Last week I stumbled over this interesting article on the potentially changing Model View Controller architecture implementations. (Sidenote: here's the more subtle distinction between MVC1 and MVC2 described. And here's an article on the ambiguity of the term and pattern MVC.)
An example logical diagram of MVC2 is shown below:


For quite some years, the general practice was to generate HTML as result of the View, with the browser rendering it and being the thin web client. These days though, more and more the web client is getting heavier ("fatter") because of all the Javascript being used for AJAX, SPI and, in general, more logic on the web client.
The article takes a look at the different approaches to MVC implementations:

  1. the HTML-only approach;

  2. the HTML+Javascript "basic" approach; some of the Model's "business logic" is duplicated on the client;

  3. the "AJAX" approach; partial views can be updated, the view consists of multiple HTML fragments, Javascript creates the View, not the application server;

  4. and the full-blown Javascript-only ("a la gmail") approach; Javascript in the browser creates the views, near-complete responsibility for the Model business rules in the web client (browser), the web client would be the Controller.

The approaches range from, at the one extreme end, the definitive "thin client", and at the other extreme end, the definitive "thick client"." Example frameworks that can easily facilitate the last option are Google Web Toolkit (Java to Javascript) and Pyjamas (Python to Javascript). Below GWT's architecture diagram is displayed. Note the (relatively) limited application server procedures, part of the Model, preferably only performing basic validation, security, etc.


The new MVC2 diagram for the above mentioned fourth approach would look something like this:

Included in the article is also how you could split up work in a team between people working on the View and Model parts.

I do not completely agree with the statement in the beginning of the article that says "The Web client takes care of keystrokes and mouse movements: the Web browser application itself is the Controller". I'm reading this as: the browser is the controller. Though, when you look at the first picture, that is not what the Controller is supposed to be.
But, in general the whole potential movement of going to thick clients is an interesting one to keep an eye on.
Other pros for thicker Javascript-based clients (not mentioned in the article) are:
  • Easier distribution of new versions than in the old days with fat clients like Visual Basic, where you had to make sure all clients got updated;

  • Easy opening up of your SOA webservices. The fat client could directly access them;

  • Easier mashup possibilities at the View layer via Javascript;

  • Potentially a large improvement in scalability: the client processing power is used as much as possible, the application server only performs several basic checks;

  • The Javascript generator/builder takes care of browser compatability.


Several cons are though:
  • Potentially quite significant longer page loading times when the Javascript all has to be loaded at once;

  • If not designed correctly, there could be significant extra network traffic;

  • Being dependent on the Javascript generator/builder when a browser is (not anymore) supported (though an opensource framework allows you to build it yourself if really needed).

Sunday, December 28, 2008

Best of this Week Summary 16 December - 28 December 2008

  • Great insight on Second Life's architecture. For example: "A physical server (1 CPU) is responsible for about 16 acres of land and it is connected to neighboring ones which are each responsible for another 16 acres. The server is responsible for the objects existing in its area, the scripts running, the users logged in and standing in its area". Presentation is one hour in total.

  • There's more to REST than meets the eye. And many REST APIs are not really as REST as Roy Fielding defines it. Media type design is an important item that was not in his original REST dissertation. Some interpretation of what Roy actually means can be found here.

  • JanRain (known for their OpenID libraries) have created a nice widget named RPX that allows you to integrate authentication within your existing site in an easy and user-intuitive way. I really like the clear, easy and non-intrusive way the possibilities are shown. For real novice users the redirecting to and from the authenticating sites might still be a little bit confusing though. Supported protocols are: OpenID 1.x/2.0, Facebook Connect, MySpaceID and Google. Below is a screenshot of what the registration part looks like:

    A couple of example sites where this is already implemented can be found here. And some more on the possibilities here.
    Note that from the technical overview you can see that the RPX server sits in between. That is the only disadvantage of this solution: that you are dependent on an intermediate server.

  • The W3 Consortium has released a webpage mobile-friendliness checker. The tests it performs can be found at the mobileOK Basic Tests 1.0 specification. Other validators you might know from them are the feed validator, XML Schema Validator, CSS validator or Markup validator. Running these very succesful services without any advertising is costing a lot of money. Therefore you can now donate here for support. If you compute how much time those validators have saved you, donating any small percentage of that will already help W3C keep these validators running.

Saturday, December 13, 2008

Best of this Week Summary 8 December - 14 December 2008

  • Spring's Web Flow 2 now lets you use JSF as view technology. It addresses a couple of the existing JSF issues and already some features only present in JSF 2.0.

  • Microsoft (yes yes, don't stop reading immediately ;-) has published a How-To Design Using Agile Architecture guide which "will help you start the process of designing your application. It discusses the six main steps you should follow, and then discusses the issues involved in making logical choices. It also provides checklists to help you ensure that the proposed design will meet your requirements", including patterns, best practices and agile considerations. This is a quick summary of the guide.

  • A tiny bit off-track, but still interesting to point out: of course you know Google's GWT, in which you can create a Javascript web front-end application in Java. But now this is also possible in Python (recently releasing version 3) with Pyamas! Pretty cool!

  • Talking about software architecture, how would you document that correctly? Here's a bunch of good tips trying to answer that. It is a good high-level overview of what you should document in an application architecture. Focus is on UML 2.0, but what should be in the documentation is valid for any notation format.

  • Here's the first list (and maybe last :-) I'll post on looking back @ 2008: on overview of what happened with Java in 2008.