Hello Kent,

On Aug 1, 2:00 pm, Kent Larsson <kent.lars...@gmail.com> wrote:
>
> I'm planning to reduce my time at my full time job to create a small
> startup. And I am thinking about create a lean and mean architecture
> which will enable me to get things done.
>
Cool!

> I am thinking about creating a layered architecture like this:
>
> 1. Front end
> 2. Business
> 3. Database
>
> I think that the "2. Business Layer" should be Clojure. It would talk
> to the "1. Front End" by a web service REST interface. Exactly how the
> data should be encoded is something I haven't though about yet. But
> JSON seems like an easy format.
>
Building a JSON service in Clojure and Compojure is easy to do.

> My idea is basically to create a good Customer Relationships
> Management (CRM) system and sell it as a service to companies. The
> users will input information about customers and related events and it
> will be easy to search. I'll have quite a lot of business logic which
> makes these tasks easier. The logic will most often be stuff which
> handles graphs (which SQL really has some problems handling nicely).
>
I've not used it but neo4j looks like it might be worth looking at:
http://neo4j.org/

> Some must have goals:
>
> 1. If it becomes a success, it needs to be able to scale over multiple
> machines with load balancing. There will be some data which should be
> replicated between the machines, but a delay is all right.
> 2. As I sell it uptime is important. If I have several machines and
> one of them dies. I'd like the service to be available using the other
> machines.
>
Some people have had success getting Clojure running on google app
engine. You get scaling for little effort but the BIG downside is that
your app can take over 10 seconds to respond when nobody is using it
(when under load the app runs at a decent speed).

> My questions:
>
> 1. Do you think Wicket is a good choice for the front end for me? It
> has session state on the server which I need to replicate in more or
> less real time. If I have the state on the client using JavaScript I
> don't have to deal with that replication. But how would I achieve that
> in the most smooth way? Should I go for Compojure for the front end to
> not have to deal with two languages? And then maybe skip the
> separation of layer "1. Front End" and "2. Business"?
>
I've not used wicket. Compojure/Hiccup are wonderful, will handle
session state no problem, but they aren't a full web framework. You
will have to do extra work compared to say Ruby on Rails, Django or
Grails where you can get a front-end up in a weekend.

> 2. Will it be hard to write a nice web service interface in Clojure?
> Is it a suitable communication strategy with Clojure? Maybe I am
> making it too complicated?
>
Web services are easy in Clojure/Compojure (that's worth saying
twice).

> 3. Clojure has a lot of nice stuff for handling data in transactions.
> But if all my data resides in a database will I get to really enjoy
> this advantage? I have been thinking about actually storing the data
> using Clojure and skip the database, to get more out of Clojure. Is
> that idea too crazy? I will have to deal with data replication myself
> then, or maybe something like memcache will solve it for me?
>
Personally, I'd stick with some sort of database as it will have been
designed to protect your data from accidents. Clojure has lots of
advantages even if you don't use the concurrency features.

>
> 5. Is it hard to debug Clojure? Using Java/C# today you get a real
> treat when it comes to debugging with interactive stepping, expression
> watching and a lot of other cool things. Where is Clojure debugging
> compared to other languages? Is the debugging features as necessary as
> in other languages?
>
Conventional debugging is harder at the moment but having a REPL or
using swank means there is less need for debugging anyway. You can
play with each function as you write it.

> 7. Any other advice or thoughts you have about this?
>
I wouldn't worry too much about scaling. Making an application
scalable is a lot of work (unless you're using something like Google
appengine). Computers are much faster than they used to be. A single
machine running Jetty/Compojure with a database such as H2 will handle
100's/1000's of pages per second. If you exceed this your business
will be very successful, you will know your application better and
then you can concentrate on scaling.

Saul

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to