Hi Jim,

Sounds to me as if your design could use Drizzle as a component of the Nimbus node.

Have you considered this?

On Sep 29, 2008, at 4:59 PM, Jim Starkey wrote:

Paul McCullagh wrote:

On Sep 27, 2008, at 1:45 PM, Jim Starkey wrote:
Let me propose an alternative solution for sharding and load balancing (oh, I hate the very idea of this being user visible!). Suppose you added a mechanism to associate an arbitrary ordered set of attribute/value pairs with a connection that would be sent along as part of the protocol. Your proxy could use these to decide where to direct a connection. After, after making this weighty decision, it could pre-pend its own attribute/value pair indicating where it sent the connection so subsequent statements would go the same place. This has many advantages:

 * It doesn't require standardization of SQL entrails
 * It isn't dependent on client winks and proxy nudges -- it's all
   above board
 * It provides a consistent mechanism to direct a series of
   transactional statements to a particular server
 * It is consistent with compiled statements (so is existing
   proposal, incidentally)
 * It is consistent with aggregating interfaces

How does this handle the fact that the data is partitioned and so not all data is available to a particular node/server?
It doesn't handle it at all. Neither does Brian's approach of tokening SQL on the client so the proxy can pick through the entrails to deduce the shard to which the query must be be delivered. It just makes a difficult and unpleasant technique a little easier for the client and the proxy.

I've been redesigning the connection/service/protocol handling for Nimbus over the last couple of days. If anyone's interested, I'd be happy to sketch out the evolving design.


I would be most interested!

Let me start with the problem. A Nimbus node needs to support an open ended set of services/protocols/relationships with other nodes. First, there are an intra-Nimbus connections for replication. Second, there is a straightforward JDBC based protocol for handling database access by Nimbus clients. Next, there are cloud management connection/services to monitor (and to a lessor degree control) a Nimbus cloud. Finally, there is an open ended set of aggregating interfaces to enable execution of a number of SQL statements under control of server side logic to reduce the number of round trips between a client and Nimbus node. It's safe to assume that these services use a variety of different line protocols, and trying to bring them into one mega-protocol is a fool's errand.

One way to handle this is for each server to have a separate port for each service. But this is a lot of IP address and ports to track. And given a requirement to support any number of server processes on a single node for development, a more difficult problem.

So each Nimbus node uses a single port for all incoming connections with a single very simple connect request packet, containing an encoded message type (OK, these leaves a lot of run for future abuse) and a snippet of XML. The XML to join a cloud, for example, is:

  <connect Service="platform" NodeType="1" Password="in your dreams"/>

Internally, services register with a ConnectionManager. When a connection shows up, the ConnectionManager reads a message from the connection, verifies the integrity of the packet, parses the XML, finds a service corresponding to the Service attribute, and passes the socket off to the service, at which point the service owns the socket and can do anything it wishes. Each service will extend the XML to handling any identification or authentication information, connection specific data, etc.

I can hear hundreds of you saying to yourself, "yuck! XML!". It doesn't have to be actual XML. Anything homeomophic will do. The requirements are nested named entities each with a set of attribute/ value pair. Binary, character, who cares? I use XML because it's well defined and you can read it. If it offends you, use something else.

This isn't a rocket science, but a straightforward solution to a messy problem that doesn't require that fragments of my brain come to a unified protocol. The more complex the project, the bigger the payback.

--
Jim Starkey
President, NimbusDB, Inc.
978 526-1376




--
Paul McCullagh
PrimeBase Technologies
www.primebase.org
www.blobstreaming.org
pbxt.blogspot.com




_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to