Practical SOA for beginners

I am new to SOA. Thus, I look at some of the “SOA structures / technologies” and try to figure out how to use them to create a highly scalable Facebook class website.

There are a few "pains" that I am trying to solve here:

  • Compatibility (+ control dependencies, Pub / Sub)
  • Services Language Independence
  • Scalability and performance
  • High availability

I reviewed some technologies that meet a subset of the above criteria:

  • Thrift is the cross-platform RPC platform for Facebook.
  • WCF - supports SOAP, JSON and REST, so it can be considered compatible with the language. Creates WSDL files that can be used to create Java proxies.
  • Microsoft DSS - just included it in my survey, but it does not seem relevant, as it is very managed with the help of staff and .NET are specific.
  • Web Services

Now I understand how from the foregoing I get some aspects of compositional and linguistic independence. But I did not find much specific information (and not hype) on how to use the above / other tools for scalability and high availability. So finally, I wonder:

How to use SOA technology to solve the problems that I identified above? Where can I find technical manuals for this? I am looking for more than just system diagrams, but rather actual libraries, code samples, APIS ...

+6
web-services service scalability soa high-availability
source share
7 answers

I think this question has more to do with concepts than with tools. Answers on questions:

  • Understand and internalize a limited context . The preservation of unrelated parts makes it important for real reuse on different services. The technologies associated with this will not help you in this, so you should separate the application in appropriate contexts, which you can use accordingly for different services.
  • A clear endpoint for communication based on known protocols allows you to implement different parts with different technologies.
  • Having workflows such as independent actions based on different protocols gives you many places where you can add levels. It is a specific subprocess of the general process using a large number of resources, and the server can no longer use it, just go to a separate server. The load continues to grow, and this server no longer accepts it, adds an additional server and load balance. You also have more options for caching and pooling.
  • Have a critical subprocess that must be available all the time, add a server so you can complete the failure. Have a general process that needs to be “accessible” all the time, use queues for parts that can be processed later.

Do you really need to support this type of load? Set appropriate performance / load / compatibility targets that are specific to the scenario. If you really need to support this type of load, I recommend that you get someone on board who can handle it.

If this is something for the burden that may end up, identify limited contexts and design interactions between people with SOA thinking. Keeping the code clean is all you need to do for the rest, use TDD, loose communication, targeted integration tests, etc. In your code base. With good code, if you need to separate parts of the system, it will be much easier.

+6
source share

There are interesting and relevant things about services and architecture from Amazon CTO - Werner Vogels:

+2
source share

IDesign.net has tons of great downloads for WCF.

+1
source share
0
source share

Check out the Mule project, which links the CXF service stack, as well as the Mule REST package, which provides RESTful alternatives. I think you will see that it affects all your pains, and there are many examples in the documentation, as well as in the distribution.

0
source share

May I recommend the book: Enterprise Service Oriented Architects, published by Springer Verlag.

0
source share

All the tips here are good and good, but don't worry about it until you need it.

Focus on creating a useful, functional application that people really enjoy. When you start to run into problems, start working with bottlenecks.

You can never predict how the application will fail, as you can tell if [[insert tech here]] is your answer?

0
source share

All Articles