Mojo, if you're building a simple CRUD app, you can build it in pretty much any language with similar effort and results. ErlyWeb's goal is to make building webapps in Erlang as easy as in Ruby/Python/PHP/etc and I think it achieves it pretty well. AFAIK, Erlang will give you better performance than the popular scripting languages, but you'll have to benchmark it and decide how much it matters to you.
If your app's backend is more complex than a few web servers that talk to a single database server, Erlang can help you even more. If to respond to a request, you need to do multiple things concurrently or do some distributed computation, or fire off background processes for asynchronous tasks, Erlang is the best choice by a long shot. Erlang is much better than other languages for Comet apps that maintain persistent connections to the clients (I'm sure you've seen the apache-vs-yaws graph :) ). For more common needs, Erlang/ErlyWeb also has better support for sharing session state (using Mnesia) and transaction-aware multi-db connection pooling (using lightweight processes + messaging) than other languages. Erlang/ErlyWeb is great for highly available applications (and for interactive and highly productive development) due to its support for hot code swapping. You can even change your database schema, recomplie your app, and start using the new schema without taking your server offline. And finally, Erlang is fun! :) Cheers, Yariv On Nov 10, 2007 7:08 AM, mojo.talantikite <[EMAIL PROTECTED]> wrote: > > Thanks for all the answers, I really appreciate them. Sometime later > today or tomorrow I'd like to write up some questions that pertain to > more of what I'm trying to do, but for now that gives me some pretty > good ideas as to how I could use Erlang/ErlyWeb. > > Overall, what do you feel are Erlang/ErlyWeb's particular strengths > when it comes to web development? Of course you can pretty much get > any language/framework to do what you need it to do, but how does this > particular combination yield itself to solving (or simplifying) > particular web development problems? > > Thanks again, the answers were very helpful. > > best, > Mojo > > > On Nov 9, 6:25 am, Al <[EMAIL PROTECTED]> wrote: > > On Nov 9, 9:08 am, "Yariv Sadan" <[EMAIL PROTECTED]> wrote: > > > > > > > > > On Nov 8, 2007 12:23 PM, mojo.talantikite <[EMAIL PROTECTED]> wrote: > > > > > > I'm in the very early stages of founding a startup, and currently > > > > we're in talks about what type of technology to be using. As there > > > > aren't too many people on board now, and none besides myself that are > > > > technical, there is a pretty blank slate for development as of now. > > > > After playing around with Erlang for the past couple of days I'm > > > > starting to think about the pros/cons of using Erlang. > > > > > > Anyways, I have questions pertaining to how Erlang/ErlyWeb addresses > > > > certain needs and issues of scaling. I thought it might be more useful > > > > for a greater number of people if instead of speaking solely about our > > > > needs for our web app, we use an example people might be familiar with > > > > and get more from: YouTube. Here are some notes on a Google Tech Talk > > > > that was given, which also contains a link to the tech talk video: > > > >http://kylecordes.com/2007/07/12/youtube-scalability/ > > > > > > Here are some questions that come to mind when thinking about what > > > > they faced: > > > > > > 1. Their main reason for choosing Python as their language is because > > > > development speed and productivity was (and is) very important for > > > > various reasons (one important one was probably showing prototypes and > > > > their progresses to potential investors). Erlang seems to be a very > > > > productive environment for some applications, but how does it stand up > > > > for web app development? Using Python, PHP, or Ruby has the added > > > > benefit of having lots of developers to draw from their experiences -- > > > > how would Erlang compare? > > > > > Erlang definitely has fewer developers using it for webapps that PHP, > > > Python or Ruby. My subjective take is that, having done PHP > > > programming and played with RoR, ErlyWeb can be just as productive if > > > not more and its code is very concise and expressive. I rarely feel > > > that I'm writing repetitive code that doesn't directly solve the > > > problem domain. Plus, I prefer Erlang's functional style to imperative > > > one. I think FP makes your code more readable and debuggable. Erlang > > > has fewer libraries than more popular languages, which may or may not > > > affect you depending on your app's needs, but I think that the fewer > > > libraries isn't as big an issue as some people say. Erlang has a > > > variety of ways for talking to other lanugages and I'd rather write > > > most of my code in Erlang in occasionally outsource some functionality > > > to another language than lock my whole app to a language I don't like > > > as much just because of the existence of a couple of libraries for it. > > > Btw, Erlang also has some tools that other languages don't have -- > > > most notably, elegant concurrency and Mnesia. > > > > > > 2. Serving content was of course a big issue. They moved to lighttpd > > > > from Apache for their videos and got a lot of performance increases > > > > (they use CDNs for their most popular content). Yaws seems great for > > > > dynamic content, but is there anything better for the static content? > > > > > Use lighttpd for static content and Yaws (or MochiWeb) for dynamic > > > content. > > > > > > 3. Another major issue YouTube ran into was serving their > > > > thumbnails. Each video can have about 4 thumbnails and each page, > > > > while having only one video playing, could have 40-60 thumbnails per > > > > page. Thumbnails, unlike video, aren't distributed across hundreds of > > > > machines (due to their size). So, you have lots of requests per > > > > second and tons of disk seeks. Apache didn't really work out, so they > > > > then went to a modified version of lighttpd that put the disk reads > > > > into worker threads -- but they ran into issues with that as well. > > > > They finally went to Google's BTFE. How would Erlang look at this > > > > problem -- would Yaws help at all? > > > > > I'm not too familiar with this problem, but if it's static data, it's > > > generally better to serve if from lighttpd than Yaws. > > > > Agreed LightHttpd or apache will outperform Yaws with static content. > > If its lots of small files/images look at using a cache like server > > with lots and lots of RAM also consider using solid state disks (SSDs) > > in Raid 0 configs, these are much faster than traditional disks for > > random small files, they blow away performance of even 15K scsi arrays > > for this job, as seeks on SSD flash are near zero in comparison. The > > limit here is capacity. You can get 64GB SSDs with Sata interfaces > > (Sata II soon from Samsung) raid these up with Sata Raid Boards on > > fast PCIe interfaces + built in Sata ports in a mirror config You will > > be surprised at how kick ass fast these are for the job. You also need > > good server Gigabit ports that can be aggregated. > > > > > > > > > > > > > > 4. They use MySql to store metadata, but as the site got huge, they > > > > ran into some issues with it. They went from having one database to > > > > doing db replication. That caused issues eventually, one of them > > > > being that spreading read load (being asynchronous) caused the > > > > database to serve outdated data from time to time. They then went to > > > > partitioning the database into shards. Overall, though, they're > > > > running into issues due to the fact that they're trying to do more and > > > > more stuff with the data. For example, recommendation systems and > > > > data mining gets really hard on 100s of millions of views per day, so > > > > they are needing some solutions that can do parallel queries and > > > > handle distributed computation. Would Mnesia be able to help handle > > > > these issues, or anything else from the Erlang world that could deal > > > > with these issues? > > > > > Mnesia is more suited for storing live session data than large amounts > > > of persistent data. And Mnesia isn't really suited for data mining -- > > > just for simple queries. However, Erlang helps in that it allows you > > > to connect to multiple databases using its great connection pooling > > > capabilities (a process is spawned for each database connection, and a > > > dispatcher process is responsible for routing queries to connection > > > processes). If I were building YouTube in Erlang, I would consider > > > doing all replication and partitioning work in the application code > > > rather than relying on the database engine. > > > > Use flat files for the metadata and cache them where possible across > > machines, consider an appending meta file storage controller (write it > > yourself) and file formats that enable appending rather than editing. > > The trick heres is to only append to files where possible, editing is > > expense (Well percolating the changes is).Break the files up like you > > would database tables and crate summarized view files for common > > queries. > > > > If there is a lot of data + analysis consider something like a map > > reduce pattern to create views on the backend, erlang is excellent for > > this sort of stuff, blows the socks of most others. > > > > regards > > Al > > > > Regards > > Al > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "erlyweb" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/erlyweb?hl=en -~----------~----~----~----~------~----~------~--~---
